Tôi hiện đang đọc " Concurrency in C # Cookbook " của Stephen Cleary và tôi nhận thấy kỹ thuật sau:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTasklà một cuộc gọi đến httpclient.GetStringAsyncvà timeoutTaskđang thực thi Task.Delay.
Trong trường hợp nó không hết thời gian chờ, thì downloadTasknó đã được hoàn thành. Tại sao lại cần phải chờ đợi lần thứ hai thay vì quay lại downloadTask.Result, vì nhiệm vụ đã được hoàn thành?
AggregateExceptionvới Resultngoại lệ đầu tiên so ExceptionDispatchInfovới với với await). Thảo luận chi tiết hơn trong "Task Xử lý ngoại lệ trong .NET 4.5" Stephen Toub của: blogs.msdn.com/b/pfxteam/archive/2011/09/28/... )
downloadTaskvà làtimeoutTaskgì? Họ làm gì?