Task<TResult> Класс

Определение

Представляет асинхронную операцию, которая может вернуть значение.

generic <typename TResult>
public ref class Task : System::Threading::Tasks::Task
public class Task<TResult> : System.Threading.Tasks.Task
type Task<'Result> = class
    inherit Task
Public Class Task(Of TResult)
Inherits Task

Параметры типа

TResult

Тип результата, созданного данной задачей Task<TResult>.

Наследование
Task<TResult>

Комментарии

Класс Task<TResult> представляет одну операцию, которая возвращает значение и обычно выполняется асинхронно. Task<TResult>Объекты являются одним из центральных компонентов асинхронной модели на основе задач, впервые представленной в платформа .NET Framework 4. Поскольку работа, выполняемая Task<TResult> объектом, обычно выполняется асинхронно в потоке пула потоков, а не синхронно в потоке main приложения, для определения состояния задачи можно использовать Status свойство , а также IsCanceledсвойства , IsCompletedи IsFaulted . Чаще всего лямбда-выражение используется для указания работы, которую выполняет задача.

Task<TResult> Экземпляры могут создаваться различными способами. Наиболее распространенным подходом, который доступен начиная с платформа .NET Framework 4.5, является вызов статического Task.Run<TResult>(Func<TResult>) метода или Task.Run<TResult>(Func<TResult>, CancellationToken) . Эти методы предоставляют простой способ запуска задачи с помощью значений по умолчанию и без получения дополнительных параметров. В следующем примере метод используется Task.Run<TResult>(Func<TResult>) для запуска задачи, которая выполняет цикл, а затем отображает количество итераций цикла:

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As Task(Of Integer) = Task.Run(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                        ctr += 1
                                        Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays the following output:
'       Finished 1,000,001 loop iterations

Альтернативным и наиболее распространенным способом запуска задачи в платформа .NET Framework 4 является вызов статического TaskFactory.StartNew метода или TaskFactory<TResult>.StartNew . Свойство Task.Factory возвращает TaskFactory объект , а Task<TResult>.Factory свойство — TaskFactory<TResult> объект . Перегрузки их StartNew метода позволяют передавать аргументы, определять параметры создания задач и указывать планировщик задач. В следующем примере используется TaskFactory<TResult>.StartNew(Func<TResult>) метод для запуска задачи. Он функционально эквивалентен коду в предыдущем примере.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task(Of Integer).Factory.StartNew(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                       ctr += 1
                                       Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays output like the following:
'       Finished 1,000,001 iterations

Более полные примеры см. в разделе Асинхронное программирование на основе задач.

Класс Task<TResult> также предоставляет конструкторы, которые инициализируют задачу, но не планируют ее выполнение. По соображениям Task.Run производительности методы и Task.Factory.StartNew являются предпочтительными механизмами для создания и планирования вычислительных задач, но в сценариях, в которых создание и планирование задач должны быть разделены, можно использовать конструкторы, а метод задачи Start можно использовать для планирования выполнения задачи на более позднее время.

Начиная с классических приложений, предназначенных для платформа .NET Framework 4.6, язык и региональные параметры потока, который создает и вызывает задачу, становятся частью контекста потока. То есть независимо от текущего языка и региональных параметров потока, в котором выполняется задача, текущий язык и региональные параметры задачи являются языком и региональными параметрами вызывающего потока. Для приложений, предназначенных для версий платформа .NET Framework до платформа .NET Framework 4.6, язык и региональные параметры задачи — это язык и региональные параметры потока, в котором выполняется задача. Дополнительные сведения см. в разделе "Язык и региональные параметры и асинхронные операции на основе задач" этой статьи CultureInfo . Обратите внимание, что приложения Магазина следуют среда выполнения Windows в параметре и получении языка и региональных параметров по умолчанию.

Для операций, которые не возвращают значение, используется Task класс . Начиная с C# 7.0 для более простой задачи, которая является типом значения, а не ссылочным типом, используйте структуру System.Threading.Tasks.ValueTask<TResult> .

Конструкторы

Task<TResult>(Func<Object,TResult>, Object)

Инициализирует новую задачу Task<TResult> с указанными функцией и состоянием.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

Инициализирует новую задачу Task<TResult> с заданными действием, состоянием и параметрами.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

Инициализирует новую задачу Task<TResult> с заданными действием, состоянием и параметрами.

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

Инициализирует новую задачу Task<TResult> с заданными действием, состоянием и параметрами.

Task<TResult>(Func<TResult>)

Инициализирует новую задачу Task<TResult> с указанной функцией.

Task<TResult>(Func<TResult>, CancellationToken)

Инициализирует новую задачу Task<TResult> с указанной функцией.

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

Инициализирует новую задачу Task<TResult> с указанной функцией и параметрами создания.

Task<TResult>(Func<TResult>, TaskCreationOptions)

Инициализирует новую задачу Task<TResult> с указанной функцией и параметрами создания.

Свойства

AsyncState

Получает объект состояния, предоставленный при создании задачи Task, или значение null, если объект не предоставлен.

(Унаследовано от Task)
CreationOptions

Возвращает объект TaskCreationOptions, используемый для создания данной задачи.

(Унаследовано от Task)
Exception

Возвращает объект AggregateException, который привел к преждевременному завершению задачи Task. Если задача Task завершилась успешно или еще не создала ни одного исключения, возвращает значение null.

(Унаследовано от Task)
Factory

Возвращает фабричный метод для создания и настройки Task<TResult> экземпляров.

Id

Возвращает идентификатор указанного экземпляра Task.

(Унаследовано от Task)
IsCanceled

Возвращает значение, указывающее, завершилось ли выполнение данного экземпляра Task из-за отмены.

(Унаследовано от Task)
IsCompleted

Получает значение, указывающее, завершена ли задача.

(Унаследовано от Task)
IsCompletedSuccessfully

Возвращает значение, указывающее, выполнена ли задача.

(Унаследовано от Task)
IsFaulted

Возвращает значение, указывающее, завершилась ли задача Task из-за необработанного исключения.

(Унаследовано от Task)
Result

Получает итоговое значение данного объекта Task<TResult>.

Status

Получает состояние TaskStatus данной задачи.

(Унаследовано от Task)

Методы

ConfigureAwait(Boolean)

Настраивает объект типа awaiter, используемый для данного объекта Task<TResult>.

ConfigureAwait(Boolean)

Настраивает объект типа awaiter, используемый для данного объекта Task.

(Унаследовано от Task)
ConfigureAwait(ConfigureAwaitOptions)

Настраивает объект типа awaiter, используемый для данного объекта Task.

ConfigureAwait(ConfigureAwaitOptions)

Настраивает объект типа awaiter, используемый для данного объекта Task.

(Унаследовано от Task)
ContinueWith(Action<Task,Object>, Object)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии и которое выполняется после завершения целевой задачи Task.

(Унаследовано от Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии и маркер отмены и которое выполняется асинхронно после завершения целевой задачи Task.

(Унаследовано от Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии и маркер отмены и которое выполняется после завершения целевой задачи Task. Продолжение выполняется на основе набора указанных условий и использует указанный планировщик.

(Унаследовано от Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии и которое выполняется после завершения целевой задачи Task. Продолжение выполняется на основе набора указанных условий.

(Унаследовано от Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии и выполняется асинхронно после завершения целевой задачи Task. Продолжение использует указанный планировщик.

(Унаследовано от Task)
ContinueWith(Action<Task<TResult>,Object>, Object)

Создает продолжение, которое получает сведения о состоянии и выполняется после завершения целевой задачи Task<TResult>.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith(Action<Task<TResult>>)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи.

ContinueWith(Action<Task<TResult>>, CancellationToken)

Создает отменяемое продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task<TResult>.

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, выполняемое в соответствии с условием, заданным в continuationOptions.

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

Создает продолжение, выполняемое в соответствии с условием, заданным в continuationOptions.

ContinueWith(Action<Task<TResult>>, TaskScheduler)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task<TResult>.

ContinueWith(Action<Task>)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task.

(Унаследовано от Task)
ContinueWith(Action<Task>, CancellationToken)

Создает продолжение, которое получает маркер отмены и которое выполняется асинхронно после завершения целевой задачи Task.

(Унаследовано от Task)
ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое выполняется после завершения целевой задачи в соответствии с заданными параметрами TaskContinuationOptions. Продолжение получает маркер отмены и использует указанный планировщик.

(Унаследовано от Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

Создает продолжение, которое выполняется после завершения целевой задачи в соответствии с заданными параметрами TaskContinuationOptions.

(Унаследовано от Task)
ContinueWith(Action<Task>, TaskScheduler)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task. Продолжение использует указанный планировщик.

(Унаследовано от Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

Создает продолжение, которое выполняется после завершения выполнения целевого объекта Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task<TResult>.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, выполняемое в соответствии с условием, заданным в continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

Создает продолжение, выполняемое в соответствии с условием, заданным в continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task<TResult>.

ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

Создает продолжение, которое получает предоставленные вызывающей стороной сведения о состоянии, выполняется асинхронно после завершения целевой задачи Task и возвращает значение.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

Создает продолжение, которое выполняется асинхронно после завершения целевой задачи Task и возвращает значение. Продолжение получает предоставленные вызывающей стороной сведения и маркер отмены.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое выполняется на основе указанных параметров продолжения задачи после завершения целевой задачи Task и которое возвращает значение. Продолжение получает предоставленные вызывающей стороной сведения и маркер отмены, а также использует указанный планировщик.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

Создает продолжение, которое выполняется на основе указанных параметров продолжения задачи после завершения целевой задачи Task. Продолжение получает предоставленные вызывающей стороной сведения.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task. Продолжение получает предоставленные вызывающей стороной сведения и использует указанный планировщик.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,TResult>)

Создает продолжение, которое выполняется асинхронно после завершения целевой задачи Task<TResult> и возвращает значение.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

Создает продолжение, которое выполняется асинхронно после завершения целевой задачи Task и возвращает значение. Продолжение получает маркер отмены.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение, которое выполняется в соответствии с заданными параметрами и которое возвращает значение. Продолжение получает маркер отмены и использует указанный планировщик.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

Создает продолжение, которое выполняется в соответствии с заданными параметрами и которое возвращает значение.

(Унаследовано от Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

Создает продолжение, которое выполняется асинхронно после завершения целевой задачи Task и возвращает значение. Продолжение использует указанный планировщик.

(Унаследовано от Task)
Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса Task.

(Унаследовано от Task)
Dispose(Boolean)

Удаляет задачуTask, освобождая все используемые ею неуправляемые ресурсы.

(Унаследовано от Task)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAwaiter()

Получает объект типа awaiter, используемый для данного объекта Task<TResult>.

GetAwaiter()

Получает объект типа awaiter, используемый для данного объекта Task.

(Унаследовано от Task)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
RunSynchronously()

Синхронно выполняет задачу Task в текущем планировщике TaskScheduler.

(Унаследовано от Task)
RunSynchronously(TaskScheduler)

Синхронно выполняет задачу Task в предоставленном планировщике TaskScheduler.

(Унаследовано от Task)
Start()

Запускает задачу Task, планируя ее выполнение в текущем планировщике TaskScheduler.

(Унаследовано от Task)
Start(TaskScheduler)

Запускает задачу Task, планируя ее выполнение в заданном планировщике TaskScheduler.

(Унаследовано от Task)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Wait()

Ожидает завершения выполнения задачи Task.

(Унаследовано от Task)
Wait(CancellationToken)

Ожидает завершения выполнения задачи Task. Ожидание завершается, если токен отмены отменяется до завершения задачи.

(Унаследовано от Task)
Wait(Int32)

Ожидает завершения задачи Task в течение указанного числа миллисекунд.

(Унаследовано от Task)
Wait(Int32, CancellationToken)

Ожидает завершения выполнения задачи Task. Ожидание завершается, если время ожидания истекает или токен отмены отменяется до завершения задачи.

(Унаследовано от Task)
Wait(TimeSpan)

Ожидает завершения выполнения задач Task в течение указанного временного периода.

(Унаследовано от Task)
Wait(TimeSpan, CancellationToken)

Ожидает завершения выполнения задачи Task.

(Унаследовано от Task)
WaitAsync(CancellationToken)

Возвращает объект , Task<TResult> который будет завершен после завершения или Task<TResult> при запросе отмены указанного CancellationToken объекта.

WaitAsync(CancellationToken)

Возвращает объект , Task который будет завершен после завершения или Task при запросе отмены указанного CancellationToken объекта.

(Унаследовано от Task)
WaitAsync(TimeSpan)

Возвращает объект , Task<TResult> который будет завершен по завершении или Task<TResult> по истечении указанного времени ожидания.

WaitAsync(TimeSpan)

Возвращает объект , Task который будет завершен по завершении или Task по истечении указанного времени ожидания.

(Унаследовано от Task)
WaitAsync(TimeSpan, CancellationToken)

Возвращает объект , Task<TResult> который будет завершен по завершении, Task<TResult> по истечении указанного времени ожидания или при запросе отмены указанного CancellationToken объекта.

WaitAsync(TimeSpan, CancellationToken)

Возвращает объект , Task который будет завершен по завершении, Task по истечении указанного времени ожидания или при запросе отмены указанного CancellationToken объекта.

(Унаследовано от Task)
WaitAsync(TimeSpan, TimeProvider)

Возвращает объект , Task<TResult> который будет завершен по завершении или Task<TResult> по истечении указанного времени ожидания.

WaitAsync(TimeSpan, TimeProvider)

Возвращает объект , Task который будет завершен по завершении или Task по истечении указанного времени ожидания.

(Унаследовано от Task)
WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Возвращает объект , Task<TResult> который будет завершен по завершении, Task<TResult> по истечении указанного времени ожидания или при запросе отмены указанного CancellationToken объекта.

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Возвращает объект , Task который будет завершен по завершении, Task по истечении указанного времени ожидания или при запросе отмены указанного CancellationToken объекта.

(Унаследовано от Task)

Явные реализации интерфейса

IAsyncResult.AsyncWaitHandle

Возвращает дескриптор WaitHandle, который можно использовать для ожидания завершения задачи.

(Унаследовано от Task)
IAsyncResult.CompletedSynchronously

Получает значение, указывающее, синхронно ли выполнена операция.

(Унаследовано от Task)

Методы расширения

DispatcherOperationWait(Task)

Ожидает завершения базовой операции DispatcherOperation в течение неограниченного времени.

DispatcherOperationWait(Task, TimeSpan)

Ожидает истечения заданного количества времени для базового DispatcherOperation.

IsDispatcherOperationTask(Task)

Возвращает значение, указывающее, связан ли данный Task с DispatcherOperation.

AsAsyncAction(Task)

Возвращает асинхронное действие среды выполнения Windows, представляющее запущенную задачу.

AsAsyncOperation<TResult>(Task<TResult>)

Возвращает асинхронную операцию среды выполнения Windows, представляющую запущенную задачу, которая возвращает результат.

Применяется к

Потокобезопасность

Все члены Task<TResult>, за исключением Dispose(), являются потокобезопасными и могут использоваться из нескольких потоков одновременно.

См. также раздел