我目前正在阅读Stephen Cleary撰写的“ 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
通过VS第一异常ExceptionDispatchInfo
带await
)。在Stephen Toub的“ .NET 4.5中的任务异常处理”中有更详细的讨论:blogs.msdn.com/b/pfxteam/archive/2011/09/28/…)
downloadTask
和timeoutTask
?他们在做什么?