Если это свойство содержит логическое значение true, а оно устанавливается после вызова метода Cancel () для экземпляра источника признаков отмены, то на экран выводится сообщение об отмене и далее вызывается метод ThrowIfCancellationRequested () для отмены задачи.

// Простой пример отмены задачи с использованием опроса.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoCancelTask {

// Метод, исполняемый как задача, static void MyTask(Object ct) {

CancellationToken cancelTok = (CancellationToken) ct;

// Проверить, отменена ли задача, прежде чем запускать ее. cancelTok.ThrowIfCancellationRequested();

Console.WriteLine('MyTask() запущен');

for(int count = 0; count < 10; count++) {

// В данном примере для отслеживания отмены задачи применяется опрос, if (cancelTok.IsCancellationRequested) {

Console.WriteLine('Получен запрос на отмену задачи.'); cancelTok.ThrowIfCancellationRequested ();

}

Thread.Sleep(500);

Console.WriteLine('В методе MyTask() подсчет равен ' + count );

}

Console.WriteLine('MyTask завершен');

}

static void Main() {

Console.WriteLine('Основной поток запущен.');

// Создать объект источника признаков отмены.

CancellationTokenSource cancelTokSrc = new CancellationTokenSource();

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

Task tsk = Task.Factory.StartNew(MyTask, cancelTokSrc.Token,

cancelTokSrc.Token);

// Дать задаче возможность исполняться вплоть до ее отмены.

Thread.Sleep(2000); try {

// Отменить задачу. cancelTokSrc.Cancel();

// Приостановить выполнение метода Main() до тех пор,

// пока не завершится задача tsk. tsk.Wait();

} catch (AggregateException exc) { if(tsk.IsCanceled)

Console.WriteLine('ХпЗадача tsk отмененап');

// Для просмотра исключения снять комментарии со следующей строки кода:

// Console.WriteLine(exc);

} finally {

tsk.Dispose(); cancelTokSrc.Dispose();

}

Console.WriteLine('Основной поток завершен.');

}

}

Ниже приведен результат выполнения этой программы. Обратите внимание на то что задача отменяется через 2 секунды.

Основной поток запущен.

MyTask() запущен

Получен запрос на отмену задачи.

Задача tsk отменена

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату