【发布时间】:2013-11-17 21:21:56
【问题描述】:
比较以下两种方法:
static async Task<int> DownloadAsync(string url)
{
var client = new WebClient();
var awaitable = client.DownloadDataTaskAsync(url);
byte[] data = await awaitable;
return data.Length;
}
用法:Task<int> task = DownloadAsync("http://stackoverflow.com");
static Task<int> Download(string url)
{
var client = new WebClient();
var task = client.DownloadDataTaskAsync(url);
byte[] data = task.Result;
return Task.FromResult(data.Length);
}
用法:
Task task = new Task(() => Download("http://stackoverflow.com"));
task.Start();
据我所知,这两种方法都是异步运行的。我的问题是:
这两种方法的行为有什么不同吗?
为什么我们更喜欢 async-await 而不是它是一个很好的模式?
【问题讨论】:
-
确保在不需要捕获
SynchronizationContext的方法中使用.ConfigureAwait(false),您在DownloadAsync中的所有等待都可以使用它。请参阅here 了解原因。
标签: c# task async-await