我以为这是一个合理的模式,用于在事件处理程序中异步调用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);
}
Run Code Online (Sandbox Code Playgroud)
但是在返回之前我发现DownloadDataTaskAsync块大约5秒钟(除非取消注释wc.Proxy = null语句).如果一个方法可以随心所欲地执行非平凡的工作甚至在返回任务之前,那么这个方法有什么意义呢?
大概这意味着安全我不应该像上面那样调用xAsync方法,而应该始终将它们包装在Task.Run()中以确保.或不?
这是WebClient/的一个已知问题HttpWebRequest:代理和DNS查找始终是同步完成的.这是一个错误,但微软已经决定不出于向后兼容性原因而修复它.
我建议的第一件事是使用HttpClient.如果这不起作用并且您需要异步,那么您可以将调用包装起来Task.Run.