Bütün bunlar, yukarıdaki konuyla ilgili pek çok soru var ama bunun yeni bir soruya varmak için yeterince farklı olduğuna inanıyorum. Aşağıdaki Task
ve Status
çeşitli görev ile başa çıkmak için bir devam var; TaskStatus.RanToCompletion
, TaskStatus.Canceled
ve tabiki TaskStatus.Faulted
aracılığıyla. o zaman ne - orada bir AggregateException
olasılığıdır devamında içinden atılan gibi kod Bu, tüm iyi çalışıyor, ama ben bu hakkı yapıyorum olsun veya olmasın endişe duyuyorumTPL ve İstisna Yönetimi
Task<bool> asyncTask = Task.Factory.StartNew<bool>(() =>
asyncMethod(uiScheduler, token, someBoolean), token);
asyncTask.ContinueWith(task =>
{
// Check task status.
switch (task.Status)
{
// Handle any exceptions to prevent UnobservedTaskException.
case TaskStatus.RanToCompletion:
if (asyncTask.Result)
{
// Do stuff...
}
break;
case TaskStatus.Faulted:
if (task.Exception != null)
mainForm.progressRightLabelText = task.Exception.InnerException.Message;
else
mainForm.progressRightLabelText = "Operation failed!";
default:
break;
}
}
benziyor?
asyncTask
numaralı telefonumda Wait
'u veya UI iş parçacığına dönüşü engelleyeceğinden devam etmek istemiyorum. devamı içinden istisnaları yakalar için mutlaka
Task parentTask = Task.Factory.startNew(() =>
{
Task<bool> asyncTask = Task.Factory.StartNew<bool>(() =>
asyncMethod(uiScheduler, token, someBoolean), token);
Task continueTask = asyncTask.ContinueWith(task =>
{
// My continuation stuff...
}
try
{
continueTask.Wait();
}
catch(AggregateException aggEx)
{
// Some handling here...
}
});
bu bile çalışacak böyle bir şey yapmak zorunda değiliz ki? Burada en iyi uygulama nedir?
Her zamanki gibi, zaman ayırdığınız için teşekkürler.
Aslında bir AggregateException attıklarında "tamamlamaya koştum" görevlerini gördüm. Bu tür bir hata işleme çalışmıyor. Neden sadece bir try/catch kullanmıyorsunuz? –
Arka plan iş parçacığında veya gerçek devam eden temsilci yönteminde çağrılan yöntemden mi bahsediyorsunuz? – MoonKnight