Вам нужен этот аргумент, если вы хотите отменить задание.Если ваше приложение не поддерживает или требует отмены, тогда вы можете просто сказать
Task.Factory.StartNew(() => { ... });
Обратите внимание, что отмена совместная, поэтому ваш код должен опросить об отмене и ответить соответственно.
Например,:
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
Task myTask = Task.Factory.StartNew(() =>
{
for (...)
{
token.ThrowIfCancellationRequested();
// Body of for loop.
}
}, token);
// ... elsewhere ...
cts.Cancel();
Вы должны передать маркер отмены методу, иначе он не присоединен к задаче.Код в методе только использует токен для ответа на отмену, либо выбрасывает, либо использует IsCancellationRequested для завершения работы.Хотя задача может быть отменена из лямбды.Самому заданию тоже нужен токен.
Вот еще несколько уточнений:
Передача токена в StartNew связывает токен с заданием.Это имеет два основных преимущества: 1) Если токен запросил отмену до начала выполнения Задачи, то Задача не будет выполнена.Вместо перехода в режим «Бег», он немедленно перейдет в режим «Отменено».Это позволяет избежать затрат на выполнение задачи, если она все равно будет отменена во время выполнения.2) Если тело задачи также отслеживает токен отмены и генерирует исключение OperationCanceledException, содержащее этот токен (что и делает ThrowIfCancellationRequested), то, когда задача видит этот OCE, она проверяет, совпадает ли токен OCE с токеном задачи.Если это так, то это исключение рассматривается как подтверждение совместной отмены, и Задача переходит в состояние Отменено (а не в состояние Сбой).
С http://social.msdn.microsoft.com/Forums/en/parallelextensions/thread/c2f614f6-c96c-4821-84cc-050b21aaee45
См.общее обсуждение отмены здесь:
http://msdn.microsoft.com/en-us/library/ff963549.aspx для дальнейшего обсуждения.