Приведенные выше примеры программы были составлены не так эффективно, как следовало бы, поскольку задачу можно создать и сразу же начать ее исполнение, вызвав методStartNew (), определенный в классеTaskFactory.В классеTaskFactoryпредоставляются различные методы, упрощающие создание задач и управление ими. По умолчанию объект классаTaskFactoryможет быть получен из свойстваFactory,доступного только для чтения в классеTask.Используя это свойство, можно вызвать любые методы классаTaskFactory.МетодStartNew() существует во множестве форм. Ниже приведена самая простая форма его объявления:

public Task StartNew(Actionaction)

гдеaction— точка входа в исполняемую задачу. Сначала в методеStartNew () автоматически создается экземпляр объекта типаTaskдля действия, определяемого параметромaction, а затем планируется запуск задачи на исполнение. Следовательно, необходимость в вызове методаStart() теперь отпадает.

Например, следующий вызов метода StartNew () в рассматривавшихся ранее программах приведет к созданию и запуску задачи tsk одним действием.

Task tsk = Task.Factory.StartNew(MyTask);

После этого оператора сразу же начнет выполняться метод MyTask ().

Метод StartNew () оказывается более эффективным в тех случаях, когда задача создается и сразу же запускается на исполнение. Поэтому именно такой подход и применяется в последующих примерах программ.

Применение лямбда-выражения в качестве задачи

Кроме использования обычного метода в качестве задачи, существует и другой, более рациональный подход: указать лямбда-выражение как отдельно решаемую задачу. Напомним, что лямбда-выражения являются особой формой анонимных функций. Поэтому они могут исполняться как отдельные задачи. Лямбда-выражения оказываются особенно полезными в тех случаях, когда единственным назначением метода является решение одноразовой задачи. Лямбда-выражения могут составлять отдельную задачу или же вызывать другие методы. Так или иначе, применение лямбда-выражения в качестве задачи может стать привлекательной альтернативой именованному методу.

В приведенном ниже примере программы демонстрируется применение лямбда-выражения в качестве задачи. В этой программе код метода MyTask () из предыдущих примеров программ преобразуется в лямбда-выражение.

// Применить лямбда-выражение в качестве задачи.

using System;

using System.Threading;

using System.Threading.Tasks;

class DemoLambdaTask { static void Main() {

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

// Далее лямбда-выражение используется для определения задачи.

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

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