use*_*000 0 .net c# asynchronous task async-await
我理解WebClient有一个DownloadStringAsync可以使用的方法
var result = await client.DownloadStringAsync(url);
Run Code Online (Sandbox Code Playgroud)
而且我想知道那只是做的有什么不同
var result = await new Task<string>(() => client.DownloadString(url));
Run Code Online (Sandbox Code Playgroud)
首先,您的第二个示例中有轻微的语法错误.您应该使用Task.Run:
var result = await Task<string>.Run(() => client.DownloadString(url));
Run Code Online (Sandbox Code Playgroud)
第一个示例从DownloadStringAsync当前线程开始,然后释放该线程以执行其他工作.
第二个示例创建一个新线程,然后DownloadString在该线程上同步运行.
一个是否优于另一个取决于是否受TaskCPU限制.在这种情况下,DownloadStringAsync更好,因为它不消耗线程.
DownloadStringAsync网络请求的激活,当它从网络接收到请求已完成的中断时,它会继续,您将收到结果.这意味着在那个时候,没有线程正在积极地等待它.
在其他情况下,在受TaskCPU限制的情况下,它并没有真正有所作为(禁止任何可能存在的小开销)
编辑
正如@ paulo-morgado在他的回答中所说,当你说DownloadStringAsync我想你的意思时DownloadStringTaskAsync.前者不返回,Task所以不能与async/await一起使用.后者是可以等待的.