public TResult Result { get; internal set; }
Аксессорsetявляется внутренним для данного свойства, и поэтому оно оказывается доступным во внешнем коде, по существу, только для чтения. Следовательно, задача получения результата блокирует вызывающий код до тех пор, пока результат не будет вычислен.
В приведенном ниже примере программы демонстрируется возврат задачей значений. В этой программе создаются два метода. Первый из них,MyTask , не принимает параметров, а просто возвращает логическое значениеtrueтипаbool.Второй метод,Sumlt , принимает единственный параметр, который приводится к типуint,и возвращает сумму из значения, передаваемого в качестве этого параметра.
// Возвратить значение из задачи.
using System;
using System.Threading;
using System.Threading.Tasks;
class DemoTask {
// Простейший метод, возвращающий результат и не принимающий аргументов, static bool MyTask {
return true;
}
// Этот метод возвращает сумму из положительного целого значения,
// которое ему передается в качестве единственного параметра 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. Именно поэтому эта подсистема рассматривается в этой главе.