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

// Запустить задачи на исполнение, tsk.Start; tsk2.Start;

Console.WriteLine("Идентификатор задачи tsk: " + tsk.Id);

Console.WriteLine("Идентификатор задачи tsk2: " + tsk2.Id);

// Сохранить метод Main активным до завершения остальных задач, for(int i = 0; i < 60; i++)    {

Console.Write(".");

Thread.Sleep (100);

}

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

}

}

Выполнение этой программы приводит к следующему результату.

Основной поток запущен Идентификатор задачи tsk: 1 Идентификатор задачи tsk2: 2 .MyTask №1 запущен MyTask №2 запущен

MyTask №1 завершен

В методе MyTask №2, подсчет равен 9 MyTask №2 завершен .........Основной поток завершен.

Применение методов ожидания

В приведенных выше примерах основной поток исполнения, а по существу, методMain, завершался потому, что такой результат гарантировали вызовы методаThread. Sleep. Но подобный подход нельзя считать удовлетворительным.

Организовать ожидание завершения задач можно и более совершенным способом, применяя методы ожидания, специально предоставляемые в классеTask.Самым простым из них считается методWait , приостанавливающий исполнение вызывающего потока до тех пор, пока не завершится вызываемая задача. Ниже приведена простейшая форма объявления этого метода.

public void Wait

При выполнении этого метода могут быть сгенерированы два исключения. Первым из них является исключениеOb j ectDisposedException.Оно генерируется в том случае, если задача освобождена посредством вызова методаDispose. А второе исключение,AggregateException,генерируется в том случае, если задача сама генерирует исключение или же отменяется. Как правило, отслеживается и обрабатывается именно это исключение. В связи с тем что задача может сгенерировать не одно исключение, если, например, у нее имеются порожденные задачи, все подобные исключения собираются в единое исключение типаAggregateException.Для того чтобы выяснить, что же произошло на самом деле, достаточно проанализировать внутренние исключения, связанные с этим совокупным исключением. А до тех пор в приведенных далее примерах любые исключения, генерируемые задачами, будут обрабатываться во время выполнения.

Ниже приведен вариант предыдущей программы, измененный с целью продемонстрировать применение методаWait на практике. Этот метод используется внутри методаMain , чтобы приостановить его выполнение до тех пор, пока не завершатся обе задачиtskиtsk2.

// Применить метод Wait.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoTask {

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

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

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

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

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