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> объекты — это один из центральных компонентов асинхронного шаблона на основе задач , который впервые появился в .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.RunTask.Factory.StartNew производительности и методы являются предпочтительными механизмами для создания и планирования вычислительных задач, но в сценариях, когда необходимо разделить создание и планирование задач, конструкторы могут использоваться, а метод задачи может использоваться для планирования задачи Start для выполнения в дальнейшем.
Начиная с настольных приложений, предназначенных для .NET Framework 4.6, культура потока, который создает и вызывает задачу, становится частью контекста этого потока. То есть независимо от текущего языка и региональных параметров потока, на котором выполняется задача, текущий язык и региональные параметры задачи — это язык и региональные параметры вызывающего потока. Для приложений, предназначенных для версий .NET Framework до .NET Framework 4.6, культура задачи соответствует культуре потока, на котором выполняется задача. Для получения дополнительной информации см. раздел CultureInfo «Культура и асинхронные операции на основе задач». Обратите внимание, что приложения Магазина следуют среде выполнения Windows в настройке и получении языка и региональных параметров по умолчанию.
Для операций, которые не возвращают значение, используйте Task класс. Начиная с C# 7.0, для более упрощенной задачи, которая является типом значения, а не ссылочным типом, используйте структуру System.Threading.Tasks.ValueTask<TResult> .
Конструкторы
Свойства
| Имя | Описание |
|---|---|
| AsyncState |
Возвращает объект состояния, предоставленный при Task создании, или значение NULL, если он не был предоставлен. (Унаследовано от Task) |
| CreationOptions |
Возвращает используемый TaskCreationOptions для создания этой задачи. (Унаследовано от Task) |
| Exception |
Возвращает значение AggregateException , которое привело к преждевременному Task завершению.
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(ConfigureAwaitOptions) |
Настраивает средство ожидания, используемое для ожидания этого Task. |
| ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены, и выполняется после завершения целевого объекта Task . Продолжение выполняется на основе набора указанных условий и использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith(Action<Task,Object>, Object, CancellationToken) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены и выполняется асинхронно при завершении целевого объекта Task . (Унаследовано от Task) |
| ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим пользователем, и выполняется после завершения целевого объекта Task . Продолжение выполняется на основе набора указанных условий. (Унаследовано от Task) |
| ContinueWith(Action<Task,Object>, Object, TaskScheduler) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим пользователем, и выполняется асинхронно после завершения целевого объекта Task . Продолжение использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith(Action<Task,Object>, Object) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим пользователем, и выполняется после завершения целевого объекта Task . (Унаследовано от Task) |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object) |
Создает продолжение, которое передает сведения о состоянии и выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
| ContinueWith(Action<Task<TResult>>, CancellationToken) |
Создает отменяемое продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, TaskContinuationOptions) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
| ContinueWith(Action<Task<TResult>>, TaskScheduler) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> . |
| ContinueWith(Action<Task<TResult>>) |
Создает продолжение, которое выполняется асинхронно при завершении целевой задачи. |
| ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется при конкуренции целевой задачи в соответствии с указанным TaskContinuationOptions. Продолжение получает маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith(Action<Task>, CancellationToken) |
Создает продолжение, которое получает маркер отмены и выполняется асинхронно после завершения целевого объекта Task . (Унаследовано от Task) |
| ContinueWith(Action<Task>, TaskContinuationOptions) |
Создает продолжение, которое выполняется, когда целевая задача завершается в соответствии с указанным TaskContinuationOptions. (Унаследовано от Task) |
| ContinueWith(Action<Task>, TaskScheduler) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task . Продолжение использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith(Action<Task>) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task . (Унаследовано от Task) |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken) |
Создает продолжение, которое выполняется при завершении целевого объекта 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>,Object,TNewResult>, Object) |
Создает продолжение, которое выполняется при завершении целевого объекта Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> . |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется на основе указанных параметров продолжения задачи, когда целевой объект Task завершается и возвращает значение. Продолжение получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта 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,Object,TResult>, Object) |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и выполняется асинхронно после завершения целевого объекта Task и возвращает значение. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Создает продолжение, которое выполняется в соответствии с указанными параметрами продолжения и возвращает значение. Продолжение передается маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task и возвращает значение. Продолжение получает маркер отмены. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions) |
Создает продолжение, которое выполняется в соответствии с указанными параметрами продолжения и возвращает значение. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task и возвращает значение. Продолжение использует указанный планировщик. (Унаследовано от Task) |
| ContinueWith<TResult>(Func<Task,TResult>) |
Создает продолжение, которое выполняется асинхронно при завершении целевого объекта Task<TResult> и возвращает значение. (Унаследовано от Task) |
| Dispose() |
Освобождает все ресурсы, используемые текущим экземпляром класса Task. (Унаследовано от Task) |
| Dispose(Boolean) |
TaskУдаляет все неуправляемые ресурсы. (Унаследовано от Task) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetAwaiter() |
Получает средство ожидания, используемое для ожидания этого Task<TResult>. |
| 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, CancellationToken) |
Task Ожидает завершения выполнения. Ожидание завершается, если интервал времени ожидания истекает или маркер отмены отмены будет отменен до завершения задачи. (Унаследовано от Task) |
| Wait(Int32) |
Task Ожидает завершения выполнения в пределах указанного числа миллисекунда. (Унаследовано от Task) |
| Wait(TimeSpan, CancellationToken) |
Task Ожидает завершения выполнения. (Унаследовано от Task) |
| Wait(TimeSpan) |
Task Ожидает завершения выполнения в течение указанного интервала времени. (Унаследовано от Task) |
| WaitAsync(CancellationToken) |
Возвращает значение Task<TResult> , которое завершится, когда это Task<TResult> завершится или когда указан CancellationToken запрос на отмену. |
| WaitAsync(TimeSpan, CancellationToken) |
Возвращает значение Task<TResult> , которое завершится, когда Task<TResult> истекает указанное время ожидания или когда указанный CancellationToken запрос на отмену запрошен. |
| WaitAsync(TimeSpan, TimeProvider, CancellationToken) |
Возвращает значение Task<TResult> , которое завершится, когда Task<TResult> истекает указанное время ожидания или когда указанный CancellationToken запрос на отмену запрошен. |
| WaitAsync(TimeSpan, TimeProvider) |
Получает значение Task<TResult> , которое завершится, когда это Task<TResult> завершится или когда истекает указанное время ожидания. |
| WaitAsync(TimeSpan) |
Получает значение Task<TResult> , которое завершится, когда это Task<TResult> завершится или когда истекает указанное время ожидания. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IAsyncResult.AsyncWaitHandle |
Получает значение WaitHandle , которое можно использовать для ожидания завершения задачи. (Унаследовано от Task) |
| IAsyncResult.CompletedSynchronously |
Получает указание на то, выполняется ли операция синхронно. (Унаследовано от Task) |
Методы расширения
| Имя | Описание |
|---|---|
| AsAsyncAction(Task) |
Возвращает асинхронное действие среды выполнения Windows, представляющее запущенную задачу. |
| AsAsyncOperation<TResult>(Task<TResult>) |
Возвращает асинхронную операцию среды выполнения Windows, представляющую запущенную задачу, которая возвращает результат. |
| DispatcherOperationWait(Task, TimeSpan) |
Ожидает завершения указанного периода времени DispatcherOperation . |
| DispatcherOperationWait(Task) |
Ожидает бесконечного завершения базовой DispatcherOperation базы данных. |
| IsDispatcherOperationTask(Task) |
Возвращает значение, указывающее, связана ли эта Task функция с DispatcherOperation. |
Применяется к
Потокобезопасность
Все члены Task<TResult>, за исключением Dispose(), являются потокобезопасными и могут использоваться из нескольких потоков одновременно.