Поделиться через


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)

Настраивает средство ожидания, используемое для ожидания этой Task<TResult>.

ConfigureAwait(Boolean)

Настраивает средство ожидания, используемое для ожидания этой Task.

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

Настраивает средство ожидания, используемое для ожидания этой Task.

ConfigureAwait(ConfigureAwaitOptions)

Настраивает средство ожидания, используемое для ожидания этой 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()

Возвращает средство ожидания, используемое для ожидания этой Task<TResult>.

GetAwaiter()

Возвращает средство ожидания, используемое для ожидания этой 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)

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

WaitAsync(Task, TimeSpan, TimeProvider, CancellationToken)

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

WaitAsync<TResult>(Task<TResult>, TimeSpan, TimeProvider, CancellationToken)

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

DispatcherOperationWait(Task)

Ожидает завершения базовой DispatcherOperation на неопределенный срок.

DispatcherOperationWait(Task, TimeSpan)

Ожидает завершения указанного времени базового DispatcherOperation.

IsDispatcherOperationTask(Task)

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

AsAsyncAction(Task)

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

AsAsyncOperation<TResult>(Task<TResult>)

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

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

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

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

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