Жду задания с OnlyOnFaulted продолжение вызывает 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);
}

тем не менее, я получаю неожиданное исключение TaskCanceledException в блоке try catch (он находится в объекте AggregateException InnerExceptions). "Задание было отменено".

почему я получаю это исключение? Продолжение для задачи никогда не срабатывает, не было никакого исключения, сгенерированного им, но я все равно получаю совокупное исключение при ожидании....

Я надеюсь, что кто-то может объяснить, как это имеет смысл для меня :)

1 ответов


вы не ждете задачи С onlyonfaulted продолжение-вы ждете on это продолжение (возвращается ContinueWith). Продолжение никогда не будет срабатывать, потому что исходная задача возвращается нормально, поэтому она действует так, как если бы она была отменена.

имеет смысл для меня.

Я подозреваю, что вы хотите создать задачу, добавить продолжение, но затем подождите оригинал задачи:

var taskTest = Task.Factory.StartNew(() =>
{
    System.Threading.Thread.Sleep(5000);

});
taskTest.ContinueWith((Task t) =>
{
    Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);