Ş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;
downloadTask
bir çağrıdır httpclient.GetStringAsync
ve timeoutTask
yürütülmektedir Task.Delay
.
Zaman aşımına uğramaması durumunda downloadTask
, zaten tamamlanmıştır. downloadTask.Result
Görev zaten tamamlanmışken neden geri dönmek yerine ikinci bir bekleme yapmak gerekiyor ?
AggregateException
ile Result
ilk istisna ExceptionDispatchInfo
ile 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/… )
downloadTask
vetimeoutTask
? Onlar ne yapar?