我认为这是在事件处理程序中异步调用WebClient DownloadData的合理模式:
private async void button1_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
//wc.Proxy = null;
byte[] bytes = await wc.DownloadDataTaskAsync("http://www.google.com");
label1.Text = Encoding.ASCII.GetString(bytes);
}
但我发现,在返回之前DownloadDataTaskAsync会阻塞大约5秒钟(除非取消注释wc.Proxy = null语句)。如果一个方法可以在返回任务之前随意执行非平凡的工作,那么这个方法具有等待的意义吗?
据推测,为了安全起见,我应该永远不要像上面那样调用xAsync方法,而是应该始终将它们包装在Task.Run()中以确保安全。是这样吗?
Async
方法確實應該幾乎立即返回任務本身。(我假設你真正說的是方法阻塞,而不是它返回的任務?) 這可能只是一個 WebClient 的 bug。 - Jon Skeet