open System
open System.Net
let fetchUrlAsync url =
async {
Console.WriteLine(sprintf "Fetch <%s>" url)
let req = WebRequest.Create(Uri(url))
use! resp = req.AsyncGetResponse()
use stream = resp.GetResponseStream()
use reader = new IO.StreamReader(stream)
let html = reader.ReadToEnd()
Console.WriteLine(sprintf "finished downloading %s. Length = %i" url html.Length)
}
[<EntryPoint>]
let main argv =
["http://bing.com"; "http://ya.ru"; "http://google.com"]
|> List.map fetchUrlAsync
|> Async.Sequential
|> Async.Ignore
|> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)
输出:
Fetch <http://bing.com>
Fetch <http://ya.ru>
Fetch <http://google.com>
finished downloading http://google.com. Length = 50592
finished downloading http://ya.ru. Length = …Run Code Online (Sandbox Code Playgroud) 我想出了这个解决方案。(尚未测试)通过网络上的大量弹跳。
Private Function ObserveUDP() As IObservable(Of bytes())
Dim f = Function(observer)
Dim endpoint = New IPEndPoint(IPAddress.Parse(Me.IpAdress), Me.IPPort)
Dim client = New UdpClient(endpoint)
Dim obs = observable.*emphasized text*Generate(Of Task(Of UdpReceiveResult), UdpReceiveResult) _
( Nothing _
, Function(task As Task(Of UdpReceiveResult)) task Is Nothing Or Not task.IsCompleted() _
, Function(task As Task(Of UdpReceiveResult)) client.ReceiveAsync() _
, Function(task As Task(Of UdpReceiveResult)) task.Result)
Dim observable = obs.Select(Function(r) r.Buffer)
dim handle = observable.Subscribe(observer)
Dim df = Sub()
client.Close()
handle.Dispose()
End Sub
Return Disposable.Create(df)
End Function …Run Code Online (Sandbox Code Playgroud) 我的班级有复杂的财产:
private Image m_LogoImage=null;
public Image LogoImage
{
get
{
if (m_LogoImage == null && File.Exists(Data.LogoFileUrl))
{
DrawingImage image = DrawingImage.FromFile(Data.LogoFileUrl);
m_LogoImage = Image.GetInstance(image, new Color(1, 1, 1));
}
return m_LogoImage;
}
}
Run Code Online (Sandbox Code Playgroud)
LogoImage.get是客户端第一次调用它时非常慢且耗费资源的操作,该属性计算图像并将结果存储在私有变量m_LogoImage中.
这对我来说非常基本..NET支持自动属性(public string P {get;set;}).它是否支持自动存储复杂的属性?