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;
downloadTask
est un appel à httpclient.GetStringAsync
, et timeoutTask
est en cours d'exécution Task.Delay
.
Dans le cas où il n'a pas expiré, alors downloadTask
est 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?
AggregateException
avec Result
vs première exception via ExceptionDispatchInfo
avec 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/… )
downloadTask
ettimeoutTask
? Que font-ils?