Ich lese gerade " Concurrency in C # Cookbook " von Stephen Cleary und habe die folgende Technik bemerkt:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTask
ist ein Aufruf an httpclient.GetStringAsync
und timeoutTask
wird ausgeführt Task.Delay
.
Falls es keine Zeitüberschreitung gab, downloadTask
ist es bereits abgeschlossen. Warum muss eine Sekunde gewartet werden, anstatt zurückzukehren downloadTask.Result
, da die Aufgabe bereits abgeschlossen ist?
AggregateException
mit Result
vs erster Ausnahme über ExceptionDispatchInfo
mit await
). Ausführlicher besprochen in Stephen Toubs "Task Exception Handling in .NET 4.5": blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTask
undtimeoutTask
? Was machen Sie?