Сравните следующие два метода:Использует async/ждут лучше, чем использовать task.Start() и почему?
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();
Насколько я могу видеть оба метода выполняются асинхронно. Мои вопросы:
Есть ли разница в поведении между этими двумя методами?
Почему мы предпочитаем асинхронное ожидание другого, тогда это хороший шаблон?
Обязательно используйте '.ConfigureAwait (false)' в методах, которые не требуют захвата 'SynchronizationContext', все ваши ожидания в' DownloadAsync' могли бы использовать это. См. [Здесь] (http://stackoverflow.com/a/13494570/921321) для объяснения, почему. – Lukazoid