Кто отменил мою задачу?
Моя задача C # отменяется, но не мной. Я не получаю трассировку стека и не могу понять, где возникает проблема.
Мой вызов задачи выглядит так:
var t = Task<Boolean>.Factory.StartNew(() =>
{
Boolean bOk = DoSomthingImportant();
return bOk;
}, TaskCreationOptions.AttachedToParent)
.ContinueWith<Boolean>((theTask) =>
{
var reason = theTask.IsCanceled ? "it was canceled" : "it faulted";
Debug.WriteLine("Error: Task ended because " + reason + ".");
... log the exception to one of my objects...
return false;
}, TaskContinuationOptions.NotOnRanToCompletion);
Я хочу, чтобы задание продолжения запускалось, если задание было сбойным или было отменено, но не в том случае, если оно прошло нормально. Продолжение никогда не выполняется.
Позже моя программа ловит AggregateException, который оборачивает TaskCanceledException.
Мое другое основное взаимодействие с моими задачами - вызывать WaitAny (taskArray, timeout) до тех пор, пока у меня не останется больше задач для запуска, затем вызывать WaitAll без тайм-аута до тех пор, пока последняя задача не будет выполнена.
Может ли WaitAny с таймаутом вызвать отмену? Почему не было вызвано мое продолжение?
Это всего лишь моя вторая кисть с библиотекой задач, поэтому я не в курсе.
ОБНОВИТЬ:
Я нашел этот ТАК вопрос: Как распространить статус отмененной задачи на задачу продолжения. Одна ошибка в моем коде выше (но не причина отмены) состоит в том, что я предположил, что статус задач продолжения был таким же, как статус исходной задачи. На самом деле вам нужно проделать определенную работу, чтобы получить одно от другого, как описано в другом посте.
ОБНОВЛЕНИЕ 2:
Брайан: Спасибо за документальную ссылку. Я искал высокие и низкие альтернативные причины отмены Задачи, но пропустил эти слова:
«Если вы ожидаете задачу, которая переходит в состояние« Отменено », задача (заключенная в AggregateException) создается и генерируется. Обратите внимание, что это исключение указывает на успешную отмену, а не на неисправную ситуацию. Поэтому свойство« Исключение »для задачи возвращает ноль. "