Actualmente estoy leyendo " Concurrencia en C # Cookbook " de Stephen Cleary, y noté la siguiente técnica:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
es una llamada a httpclient.GetStringAsync
y se timeoutTask
está ejecutando Task.Delay
.
En el caso de que no se haya agotado el tiempo de espera, entonces downloadTask
ya está completado. ¿Por qué es necesario esperar un segundo en lugar de regresar downloadTask.Result
, dado que la tarea ya está completada?
AggregateException
con Result
vs primera excepción vía ExceptionDispatchInfo
con await
). Discutido con más detalle en "Task Exception Handling in .NET 4.5" de Stephen Toub: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
ytimeoutTask
? ¿Qué hacen?