В настоящее время я читаю « Поваренную книгу о параллелизме в C # » Стивена Клири и заметил следующий прием:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
является вызовом httpclient.GetStringAsync
и timeoutTask
выполняется Task.Delay
.
В том случае, если он не истек, значит, downloadTask
он уже завершен. Почему необходимо выполнить второе ожидание вместо возврата downloadTask.Result
, если задача уже выполнена?
AggregateException
с Result
первым исключением vs через ExceptionDispatchInfo
with await
). Более подробно обсуждается в статье Стивена Туба «Обработка исключений в задачах в .NET 4.5»: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
иtimeoutTask
? Что они делают?