моя задача onError обработала исключение. Проблема в том, что задание onSuccess было отменено до его запуска. Когда WaitAll вызывает Wait (), это вызывает исключение «задача была отменена» ... это сбивает с толку.

ного озадачен тем, как использовать Задачи с условными продолжениями.

Если у меня есть задача, а затем я хочу продолжить с задачами, которые обрабатывают успех и ошибку, а затем дождаться их завершения.

void FunctionThrows() {throw new Exception("faulted");}

static void MyTest()
{

    var taskThrows = Task.Factory.StartNew(() => FunctionThrows());

    var onSuccess = taskThrows.ContinueWith(
                          prev => Console.WriteLine("success"), 
                          TaskContinuationOptions.OnlyOnRanToCompleted);

    var onError = taskThrows.ContinueWith(
                          prev => Console.WriteLine(prev.Exception),
                          TaskContinuationOptions.OnlyOnFaulted);

    //so far, so good



    //this throws because onSuccess was cancelled before it was started
    Task.WaitAll(onSuccess, onError);
}

Является ли это предпочтительным способом выполнения задачи «успех / неудача»? Кроме того, как я должен присоединиться ко всем этим задачам, предположим, что я создал длинный ряд продолжений, каждое из которых имеет свою собственную обработку ошибок.

  //for example
  var task1 = Task.Factory.StartNew(() => ...)
  var task1Error = task1.ContinueWith(  //on faulted
  var task2  = task1.ContinueWith(      //on success
  var task2Error = task2.ContinueWith(  //on faulted
  var task3 = task2.ContinueWith(       //on success
  //etc

призваниеWaitAll на этих неизменно бросках, потому что некоторые из продолжений будут отменены из-заTaskContinuationOptionsи зоветWait на отмененные задачи бросает. Как мне присоединиться к ним, не получив исключение «Задача была отменена»?

Ответы на вопрос(3)

Ваш ответ на вопрос