моя задача 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
на отмененные задачи бросает. Как мне присоединиться к ним, не получив исключение «Задача была отменена»?