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

// Создать и запустить задачу на исполнение.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoTask {

  static void MyTask() {

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

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

      Thread.Sleep(500);

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

    }

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

  }

  static void Main() {

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

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

    Task tsk = new Task(MyTask);

    // Запустить задачу на исполнение,

    tsk.Start();

    // метод Main() активным до завершения метода MyTask().

    for(int i = 0; i < 60; i++) {

      Console.Write(".");

      Thread.Sleep(100);

    }

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

  }

}

Ниже приведен результат выполнения этой программы. (У вас он может несколько отличаться в зависимости от загрузки задач, операционной системы и прочих факторов.)

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

.MyTask() запущен

....В методе MyTask(), подсчет равен 0

.....В методе MyTask(), подсчет равен 1

.....В методе MyTask(), подсчет равен 2

....В методе MyTask(), подсчет равен 3

.....В методе MyTask(), подсчет равен 4

.....В методе MyTask(), подсчет равен 5

....В методе MyTask(), подсчет равен 6

.....В методе MyTask(), подсчет равен 7

.....В методе MyTask(), подсчет равен 8

.....В методе MyTask(), подсчет равен 9

MyTask завершен

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

Следует иметь в виду, что по умолчанию задача исполняется в фоновом потоке. Следовательно, при завершении создающего потока завершается и сама задача. Именно поэтому в рассматриваемой здесь программе метод Thread.Sleep() использован для сохранения активным основного потока до тех пор, пока не завершится выполнение метода MyTask(). Как и следовало ожидать, организовать ожидание завершения задачи можно и более совершенными способами, что и будет показано далее.

В приведенном выше примере программы задача, предназначавшаяся для параллельного исполнения, обозначалась в виде статического метода. Но такое требование к задаче не является обязательным. Например, в приведенной ниже программе, которая является переработанным вариантом предыдущей, метод MyTask(), выполняющий роль задачи, инкапсулирован внутри класса.

// Использовать метод экземпляра в качестве задачи.

using System;

using System.Threading;

using System.Threading.Tasks;

class MyClass {

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

  public void MyTask() {

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

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

      Thread.Sleep(500);

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

    }

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

  }

}

class DemoTask {

  static void Main() {

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

    // Сконструировать объект типа MyClass.

    MyClass me = new MyClass();

    // Сконструировать объект задачи для метода mc.MyTask().

    Task tsk = new Task(me.MyTask);

    // Запустить задачу на исполнение,

    tsk.Start();

    // Сохранить метод Main() активным до завершения метода MyTask().

    for(int i = 0; i < 60; i++) {

      Console.Write (".");

      Thread.Sleep (100);

    }

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

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