Задача может возвращать значение. Это очень удобно по двум причинам. Во-первых, это означает, что с помощью задачи можно вычислить некоторый результат. Подобным образом поддерживаются параллельные вычисления. И во-вторых, вызывающий процесс окажется блокированным до тех пор, пока не будет получен результат. Это означает, что для организации ожидания результата не требуется никакой особой синхронизации.
public Task(Func
public Task(FuncCObject, TResult>
где
Как и следовало ожидать, имеются также другие варианты методаStartNew (),доступные в обобщенной форме классаTaskFactory
public Task
public Task
В любом случае значение, возвращаемое задачей, получается из свойстваResultв классеTask,которое определяется следующим образом.
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;
}