Bog'liq CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C
757 Задания задания Вызвать метод
QueueUserWorkItem
класса
ThreadPool
для запуска асинхронных
вычислительных операций очень просто. Однако этот подход имеет множество
недостатков. Самой большой проблемой является отсутствие встроенного меха-
низма, позволяющего узнать о завершении операции и получить возвращаемое
значение. Для обхода этих и других ограничений специалисты Microsoft ввели
понятие
заданий (tasks), выполнение которых осуществляется посредством типов
из пространства имен
System.Threading.Tasks
.
Вот каким образом при помощи заданий выполняется операция, аналогичная
вызову метода
QueueUserWorkItem
класса
ThreadPool
:
ThreadPool.QueueUserWorkItem(ComputeBoundOp, 5); // Вызов QueueUserWorkItem
new Task(ComputeBoundOp, 5).Start(); // Аналог предыдущей строки
Task.Run(() => ComputeBoundOp(5)); // Еще один аналог
Во второй строке после создания нового объекта
Task
немедленно вызывается
метод
Start
для запуска задания. Естественно, вы можете создать объект
Task
и вы-
звать
Start
для него позднее. Можно также представить код, передающий созданный
им объект
Task
какому-то стороннему методу, который и будет определять момент
вызова метода
Start
. Поскольку создание объекта
Task
с немедленным вызовом
Start
выполняется так часто, также можно воспользоваться удобным статическим
методом
Run
класса
Task
, как показано в последней строке.
Для создания объекта
Task
следует вызвать конструктор и передать ему делегата
Action
или
Action