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.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>.
Конструкторы
Свойства
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(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) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
ContinueWith(Action<Task<TResult>>, TaskContinuationOptions) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
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) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions) |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
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(), являются потокобезопасными и могут использоваться одновременно из нескольких потоков.
См. также раздел
- Task
-
библиотеки параллельных задач (TPL) - асинхронное программирование на основе задач
- примеры для параллельного программирования с помощью .NET Core и .NET Standard