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.GetStringAsynced 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?
AggregateExceptioncon la Resultvs prima eccezione tramite ExceptionDispatchInfocon 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/… )
downloadTasketimeoutTask? Cosa fanno?