Obecnie czytam książkę „ Współbieżność w C # Cookbook ” autorstwa Stephena Cleary'ego i zauważyłem następującą technikę:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
jest wezwaniem do httpclient.GetStringAsync
i timeoutTask
wykonuje Task.Delay
.
W przypadku, gdy nie upłynął limit czasu, downloadTask
jest już zakończony. Dlaczego trzeba czekać sekundę zamiast wracać downloadTask.Result
, skoro zadanie zostało już wykonane?
AggregateException
z Result
pierwszym wyjątkiem przez ExceptionDispatchInfo
with await
). Bardziej szczegółowo omówione w artykule Stephena Toub „Task Exception Handling in .NET 4.5”: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
itimeoutTask
? Co oni robią?