Кто отменил мою задачу?
Моя задача C # отменяется, но не мной. Я нене могу получить трассировку стека, и я не могуt выяснить, где возникает проблема.
Мой вызов задачи выглядит так:
var t = Task.Factory.StartNew(() =>
{
Boolean bOk = DoSomthingImportant();
return bOk;
}, TaskCreationOptions.AttachedToParent)
.ContinueWith((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 с таймаутом вызвать отмену? Почему неМое продолжение называется?
Это всего лишь моя вторая кисть с библиотекой задач, поэтому я не в курсе.
ОБНОВИТЬ:
Я нашел этот вопрос: как распространять заданиеs Отменено состояние для продолжения задачи. Одна ошибка в моем коде выше (но не причина отмены) состоит в том, что я предположил, что статус задач продолжения был таким же, как исходная задача 'статус. На самом деле вам нужно проделать определенную работу, чтобы получить одно от другого, как описано в другом посте.
ОБНОВЛЕНИЕ 2:
Брайан: Спасибо за документальную ссылку. Я искал высокие и низкие альтернативные причины отмены Задачи, но пропустил эти слова: "
Если вы ожидаете задачу, которая переходит в состояние «Отменено», задача (заключенная в исключение AggregateException) создается и выбрасывается. Обратите внимание, что это исключение указывает на успешную отмену вместо ошибочной ситуации. Следовательно, Задачаs Свойство Exception возвращает ноль. "