Attualmente sto leggendo " Concurrency in C # Cookbook " di Stephen Cleary e ho notato la seguente tecnica:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
è una chiamata a httpclient.GetStringAsync
ed timeoutTask
è in esecuzione Task.Delay
.
Nel caso in cui non sia scaduto, allora downloadTask
è già completato. Perché è necessario fare una seconda attesa invece di tornare downloadTask.Result
, visto che l'attività è già completata?
AggregateException
con la Result
vs prima eccezione tramite ExceptionDispatchInfo
con await
). Discusso in modo più dettagliato in "Task Exception Handling in .NET 4.5" di Stephen Toub: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
etimeoutTask
? Cosa fanno?