No momento, estou lendo " Concurrency in C # Cookbook ", de Stephen Cleary, e percebi a seguinte técnica:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
é uma chamada para httpclient.GetStringAsync
e timeoutTask
está em execução Task.Delay
.
Caso não tenha expirado, então downloadTask
já está concluído. Por que é necessário fazer uma segunda espera em vez de retornar downloadTask.Result
, visto que a tarefa já está concluída?
AggregateException
com Result
vs primeira exceção via ExceptionDispatchInfo
com await
). Discutido com mais detalhes em "Manipulação de exceções de tarefas no .NET 4.5" de Stephen Toub: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
etimeoutTask
? O que eles fazem?