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

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