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

Task tsk = Task.Factory.StartNew( () => {

Console.WriteLine("Задача запущена");

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

Thread.Sleep(500);

Console.WriteLine("Подсчет в задаче равен " + count );

}

Console.WriteLine("Задача завершена");

} );

// Ожидать завершения задачи tsk. tsk.Wait();

У/ Освободить задачу tsk. tsk.Dispose();

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

}

}

Ниже приведен результат выполнения этой программы.

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

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

Помимо применения лямбда-выражения для описания задачи, обратите также внимание в данной программе на то, что вызов метода tsk. Dispose () не делается до тех пор, пока не произойдет возврат из метода tsk. Wait (). Как пояснялось в предыдущем разделе, метод Dispose () можно вызывать только по завершении задачи. Для того чтобы убедиться в этом, попробуйте поставить вызов метода tsk. Dispose () в рассматриваемой здесь программе перед вызовом метода tsk .Wait (). Вы сразу же заметите, что это приведет к исключительной ситуации.

Создание продолжения задачи

Одной из новаторских и очень удобных особенностей библиотеки TPL является возможность создавать продолжение задачи.Продолжение —это одна задача, которая автоматически начинается после завершения другой задачи. Создать продолжение можно, в частности, с помощью методаContinueWith(), определенного в классеTask.Ниже приведена простейшая форма его объявления:

public Task ContinueWith(Actionдействие_продолженмя)

гдедействие_продолженияобозначает задачу, которая будет запущена на исполнение по завершении вызывающей задачи. У делегатаActionимеется единственный параметр типаTask.Следовательно, вариант делегатаAction,применяемого в данном методе, выглядит следующим образом.

public delegate void Action(T obj)

Вданном случае обобщенный параметр Т обозначает класс Task.

Продолжение задачи демонстрируется на примере следующей программы.

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

using System;

using System.Threading;

using System.Threading.Tasks;

class ContinuationDemo {

// Метод, исполняемый как задача, static void MyTaskO {

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

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

Thread.Sleep(500);

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

}

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

}

// Метод, исполняемый как продолжение задачи, static void ContTask(Task t) {

Console.WriteLine("Продолжение запущено");

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

Thread.Sleep(500);

Console.WriteLine("В продолжении подсчет равен " + count );

}

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

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

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