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;
downloadTask
là một cuộc gọi đến httpclient.GetStringAsync
và timeoutTask
đang thực thi Task.Delay
.
Trong trường hợp nó không hết thời gian chờ, thì downloadTask
nó đã đượ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?
AggregateException
với Result
ngoại lệ đầu tiên so ExceptionDispatchInfo
vớ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/... )
downloadTask
và làtimeoutTask
gì? Họ làm gì?