【发布时间】:2014-07-08 03:13:13
【问题描述】:
我目前正在阅读 Stephen Cleary 的“Concurrency in 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)。在 Stephen Toub 的“.NET 4.5 中的任务异常处理”中有更详细的讨论:blogs.msdn.com/b/pfxteam/archive/2011/09/28/…) -
你应该把这个作为答案@KirillShlenskiy
-
@MichaelPerrenoud 你说得对,谢谢你的注意,我会编辑问题。
标签: c# asynchronous async-await task