В настоящее время я читаю « Поваренную книгу о параллелизме в 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 через ExceptionDispatchInfowith await). Более подробно обсуждается в статье Стивена Туба «Обработка исключений в задачах в .NET 4.5»: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTaskиtimeoutTask? Что они делают?