Şu anda Stephen Cleary'nin " C # Yemek Kitabında Eş Zamanlılık " ı okuyorum ve aşağıdaki tekniği fark ettim:
var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
return null;
return await downloadTask;
downloadTaskbir çağrıdır httpclient.GetStringAsyncve timeoutTaskyürütülmektedir Task.Delay.
Zaman aşımına uğramaması durumunda downloadTask, zaten tamamlanmıştır. downloadTask.ResultGörev zaten tamamlanmışken neden geri dönmek yerine ikinci bir bekleme yapmak gerekiyor ?
AggregateExceptionile Resultilk istisna ExceptionDispatchInfoile arasındaki fark await). Stephen Toub'un ".NET 4.5'te Görev İstisnası İşleme" bölümünde daha ayrıntılı olarak tartışıldı: blogs.msdn.com/b/pfxteam/archive/2011/09/28/… )
downloadTaskvetimeoutTask? Onlar ne yapar?