Отмена выполнения задач

Отмена выполнения заданий осуществляется с помощью специальных маркеров отмены (token). Структура CancellationToken - распространяет уведомление о том, что операции следует отменить. При запуске задачи можно передать маркер отмены, что позволит отменить выполнение задачи:

CancellationTokenSource cancelSource = new CancellationTokenSource();

CancellationToken token = cancelSource.Token;

 

Task task = Task.Factory.StartNew (() =>

{

token.ThrowIfCancellationRequested(); // Проверяем запрос отмены

}, token);

...

cancelSource.Cancel();

Для отмененной задачи вызывается исключение - AggregateException, которое необходимо обработать и проверить следующим образом:

try

{

task.Wait();

}

catch (AggregateException ex)

{

if (ex.InnerException is OperationCanceledException)

Console.Write ("Задание отменено");

}


увеличить изображение
Рис. 7.6.Результат выполнения программы с использованием отмены задачи

Продолжения

Для того что бы упорядочить выполнение задач в программе, т.е. к примеру что бы Задача 3 выполнялась сразу же после выполнения Задачи 2, а Задача 2 после завершения Задачи 1, необходимо использовать методContinueWith() класса - Task. Форма объявление данного метода представлена ниже:

public Task ContinueWith(Action<Task>)

Пример работы метода ContinueWith() представлен ниже:

Task task1 = Task.Factory.StartNew (() => Console.Write ("Hello "));

Task task2 = task1.ContinueWith (main => Console.Write ("World!"));

где main - аргумент, который передается в задачу-продолжение в лямбда-выражении, является ссылкой на родительскую задачу.


увеличить изображение
Рис. 7.7.Результат выполнения программы с использование метода ContinueWith()

Продолжения и Task <TResult>

В классе Task<TResult>, также можно использовать продолжение и возвращать некоторые данные, с использованием последовательности вычисления:

Task.Factory.StartNew<int>(() => 10)

.ContinueWith(main => main.Result * 2)

.ContinueWith(main => Math.Sqrt(main.Result))

.ContinueWith(main => Console.WriteLine(main.Result));


увеличить изображение
Рис. 7.8.Результат выполнения программы с использование продолжения в классе Task<TResult>








Дата добавления: 2017-06-02; просмотров: 263;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.