Зараз я читаю " Конкурс у C # Cookbook " Стівена Клірі, і я помітив таку техніку:
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
першим винятком через ExceptionDispatchInfo
з await
). Більш детально обговорюється в розділі «Завдання обробки виключень в .NET 4.5» Стівена Toub в: blogs.msdn.com/b/pfxteam/archive/2011/09/28 / ... )
downloadTask
іtimeoutTask
? Що вони роблять?