Je lis actuellement " Concurrency in C # Cookbook " de Stephen Cleary, et j'ai remarqué la technique suivante:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTaskest un appel à httpclient.GetStringAsync, et timeoutTaskest en cours d'exécution Task.Delay.
Dans le cas où il n'a pas expiré, alors downloadTaskest déjà terminé. Pourquoi est-il nécessaire de faire une seconde attente au lieu de revenir downloadTask.Result, étant donné que la tâche est déjà terminée?
AggregateExceptionavec Resultvs première exception via ExceptionDispatchInfoavec await). Discuté plus en détail dans "Task Exception Handling in .NET 4.5" de Stephen Toub: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTaskettimeoutTask? Que font-ils?