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 завершен

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

Следует иметь в виду, что по умолчанию задача исполняется в фоновом потоке. Следовательно, при завершении создающего потока завершается и сама задача. Именно поэтому в рассматриваемой здесь программе метод 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);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату