mam jakiś prosty kod jako Repro:Oczekiwanie na zadanie z OnlyOnFaulted Kontynuacja powoduje AggregateException
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
try
{
Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Jednak Dostaję nieoczekiwany TaskCanceledException wyrzucane w bloku try catch (to w Obiekt InnerExceptions AggregateException). "Zadanie zostało anulowane".
Dlaczego otrzymuję ten wyjątek? Kontynuacja zadania nigdy się nie uruchamia, nie było generowanego przez niego wyjątku, ale mimo to mam generowany wyjątek podczas oczekiwania ...
Mam nadzieję, że ktoś może wyjaśnić, jak to ma dla mnie znaczenie:
miałem dokładnie ten sam scenariusz jak ty. Myślę, że byłoby bardziej elegancko i intuicyjnie po prostu propagować wynik poprzedniego zadania. Rzucanie TaskCanceledException było dość zaskakujące ... – NickL