【发布时间】:2017-04-24 20:52:19
【问题描述】:
请告诉我,这两种方法有什么区别?两者是否会运行async?在await之后的流中会做什么?
public async Task<ActionResult> RunAsync()
{
var client = new WebClient();
await client.DownloadDataAsync(someUri);
return _jsonDataResult;
}
和
public async Task<ActionResult> RunAsync()
{
var client = new WebClient();
await Task.Run(()=>
{
client.DownloadData(someUri);
});
return _jsonDataResult;
}
使用第二种方法有意义吗?
【问题讨论】:
-
这个问题可能对你有帮助 - stackoverflow.com/questions/18013523/…
-
@DavidPine 我没有注意到问题文本提出的问题与标题不同。并且没有原生 API,您的意思是 原生异步 API。这个问题显示了LOT 的混乱,例如为什么
await Task.Run而不是return Task.Run?甚至是await client.DownloadDataAsync();而不是return client.DownloadAsync()? -
实际上,在查看源代码时——
WebClient甚至没有将.DownloadDataAsync公开为Task返回方法。因此,不能等待! -
WebClient遵循为 TAP 使用 TaskAsyn 后缀方法的推荐模式,因为它已经为 EAP 提供了 Task 后缀方法。
标签: c# asp.net-mvc asynchronous async-await