Читаем C# 4.0 полное руководство - 2011 полностью

В приведенной ниже программе демонстрируется отмена задачи. В ней применяется опрос для контроля состояния признака отмены. Обратите внимание на то, что методThrowIfCancellationRequested() вызывается после входа в методMyTask (). Это дает возможность завершить задачу, если она была отмена еще до ее запуска. Внутри цикла проверяется свойствоIsCancellationRequested.Если это свойство содержит логическое значение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 отменена

Основной поток завершен.

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT