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> объектом, обычно выполняется асинхронно в потоке пула потоков, а не синхронно в основном потоке приложения, можно использовать Status свойство, а также IsCanceledIsCompletedсвойства и 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)
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)

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

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(), являются потокобезопасными и могут использоваться из нескольких потоков одновременно.

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