Reo*_*ron 7 c# networking webclient visual-studio-2010
我正在使用WebClient.DownloadFile一次从Web服务器下载单个文件,但是,我想知道是否"线程被阻止"开发人员意味着应用程序不会响应?
我尝试使用WebClient.DownloadFileAsync,但它不能像DownloadFile一样工作,请澄清,我说不清楚,因为我正在从我的网络下载文件,所以它几乎立即下载,提前感谢.
PS:是的我试过谷歌搜索和阅读,找不到我需要的答案.
i3a*_*non 10
编辑:WebClient.DownloadFileAsync以"异步"结束,但不返回任务.这是其中的一部分Event-based Asynchronous Pattern所以我的答案是不相关的.这个是:您需要订阅WebClient.DownloadFileCompleted事件以了解异步操作何时完成.例如:
var client = new WebClient();
var uri = new Uri(address);
client.DownloadFileCompleted += (sender, e) => Console.WriteLine("Finished");
client.DownloadFileAsync(uri, "Hamsters.txt");
Run Code Online (Sandbox Code Playgroud)
原始答案:
WebClient.DownloadFileAsync返回您需要等待的任务.像这样:
await WebClient.DownloadFileAsync(...)
Run Code Online (Sandbox Code Playgroud)
DownloadFileAsync将触发异步操作并返回在操作结束时将完成的任务.await意味着等待该任务以异步方式结束,因此当您获得结果时,它之后的代码将运行DownloadFileAsync.
synchronic DownloadFile将阻止调用它的线程.如果它是UI线程,那么是...您的应用程序将无法响应.如果它不是UI线程,那么它仍然会响应,但它的可伸缩性会降低(这意味着它使用线程等待而不是做工作,所以你的应用程序作为一个整体可以用相同数量的线程做得更少)
小智 5
client.DownloadFileTaskAsync(new Uri(url), saveLocation).Wait();
// Waiting for download...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17812 次 |
| 最近记录: |