// Этот метод возвращает сумму из положительного целого значения,
// которое ему передается в качестве единственного параметра static int Sumlt(object v) { int x = (int) v; int sum = 0;
\
for(; х > 0; х—) sum += х;
return sum;
}
static void Main() {
Console.WriteLine("Основной поток запущен.");
// Сконструировать объект первой задачи.
Task
Console.WriteLine("Результат после выполнения задачи MyTask: " + tsk.Result);
// Сконструировать объект второй задачи.
Task
Console.WriteLine("Результат после выполнения задачи Sumlt: " + tsk2.Result);
tsk.Dispose(); tsk2.Dispose();
Console.WriteLine("Основной поток завершен.");
}
}
Выполнение этой программы приводит к следующему результату.
Основной поток запущен.
Результат после выполнения задачи MyTask: True Результат после выполнения Sumlt: 6 Основной поток завершен.
Помимо упомянутых выше форм классаTask
Отмена задачи и обработка исключения AggregateException
В версии 4.0 среды .NET Framework внедрена новая подсистема, обеспечивающая структурированный, хотя и очень удобный способ отмены задачи. Эта новая подсистема основывается на понятии
ПРИМЕЧАНИЕ
Новую подсистему отмены можно применять и для отмены потоков, рассматривавшихся в предыдущей главе, но она полностью интегрирована в TPL и PLINQ. Именно поэтому эта подсистема рассматривается в этой главе.
Отмена задачи, как правило, выполняется следующим образом. Сначала получается признак отмены из источника признаков отмены. Затем этот признак передается задаче, после чего она должна контролировать его на предмет получения запроса на отмену. (Этот запрос может поступить только из источника признаков отмены.) Если получен запрос на отмену, задача должна завершиться. В одних случаях этого оказывается достаточно для простого прекращения задачи без каких-либо дополнительных действий, а в других — из задачи должен быть вызван методThrowIfCancellationRequested() для признака отмены. Благодаря этому в отменяющем коде становится известно, что задача отменена. А теперь рассмотрим процесс отмены задачи более подробно.