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>.
Async |
Возвращает объект состояния, предоставленный при создании Task, или значение NULL, если он не указан. (Унаследовано от Task) |
Creation |
Возвращает TaskCreationOptions, используемый для создания этой задачи. (Унаследовано от Task) |
Exception |
Возвращает AggregateException, вызвавшие преждевременное завершение Task. Если Task выполнен успешно или еще не вызвал никаких исключений, возвращается |
Factory |
Возвращает метод фабрики для создания и настройки экземпляров Task<TResult>. |
Id |
Возвращает идентификатор для этого экземпляра Task. (Унаследовано от Task) |
Is |
Получает, завершилось ли выполнение этого Task экземпляра из-за отмены. (Унаследовано от Task) |
Is |
Возвращает значение, указывающее, завершена ли задача. (Унаследовано от Task) |
Is |
Возвращает, выполняется ли задача до завершения. (Унаследовано от Task) |
Is |
Возвращает, завершен ли Task из-за необработанного исключения. (Унаследовано от Task) |
Result |
Возвращает значение результата этого Task<TResult>. |
Status |
Возвращает TaskStatus этой задачи. (Унаследовано от Task) |
Configure |
Настраивает средство ожидания, используемое для ожидания этой Task<TResult>. |
Configure |
Настраивает средство ожидания, используемое для ожидания этой Task. (Унаследовано от Task) |
Configure |
Настраивает средство ожидания, используемое для ожидания этой Task. |
Configure |
Настраивает средство ожидания, используемое для ожидания этой Task. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и выполняется при завершении целевого Task. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены и выполняется асинхронно при завершении целевого Task. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены, и выполняется при завершении целевого Task. Продолжение выполняется на основе набора указанных условий и использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и выполняется при завершении целевого Task. Продолжение выполняется на основе набора указанных условий. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим пользователем, и выполняется асинхронно при завершении целевого Task. Продолжение использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, передаваемое сведения о состоянии, и выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевой задачи. |
Continue |
Создает отменяемое продолжение, которое выполняется асинхронно при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
Continue |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task. (Унаследовано от Task) |
Continue |
Создает продолжение, которое получает маркер отмены и выполняется асинхронно при завершении целевого Task. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется при конкуренции целевой задачи в соответствии с указанным TaskContinuationOptions. Продолжение получает маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется при завершении целевой задачи в соответствии с указанным TaskContinuationOptions. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task. Продолжение использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
Continue |
Создает продолжение, которое выполняется в соответствии с условием, указанным в |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task<TResult>. |
Continue |
Создает продолжение, которое получает сведения о состоянии, предоставленное вызывающим абонентом, и выполняется асинхронно при завершении целевого Task и возвращает значение. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task и возвращает значение. Продолжение получает сведения о состоянии, предоставленные вызывающим абонентом, и маркер отмены. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется на основе указанных параметров продолжения задачи при завершении целевого Task и возвращает значение. Продолжение получает сведения о состоянии, предоставленное вызывающим абонентом, и маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется на основе указанных параметров продолжения задачи при завершении целевого Task. Продолжение получает сведения о состоянии, предоставленные вызывающим абонентом. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task. Продолжение получает сведения о состоянии, предоставленные вызывающим абонентом, и использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task<TResult> и возвращает значение. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task и возвращает значение. Продолжение получает маркер отмены. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется в соответствии с указанными параметрами продолжения и возвращает значение. Продолжение передается маркер отмены и использует указанный планировщик. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется в соответствии с указанными параметрами продолжения и возвращает значение. (Унаследовано от Task) |
Continue |
Создает продолжение, которое выполняется асинхронно при завершении целевого Task и возвращает значение. Продолжение использует указанный планировщик. (Унаследовано от Task) |
Dispose() |
Освобождает все ресурсы, используемые текущим экземпляром класса Task. (Унаследовано от Task) |
Dispose(Boolean) |
Удаляет Task, освобождая все неуправляемые ресурсы. (Унаследовано от Task) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Get |
Возвращает средство ожидания, используемое для ожидания этой Task<TResult>. |
Get |
Возвращает средство ожидания, используемое для ожидания этой Task. (Унаследовано от Task) |
Get |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
Get |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
Memberwise |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
Run |
Выполняет Task синхронно на текущем TaskScheduler. (Унаследовано от Task) |
Run |
Выполняет Task синхронно на предоставленном TaskScheduler. (Унаследовано от Task) |
Start() |
Запускает Task, планируя его для выполнения в текущий TaskScheduler. (Унаследовано от Task) |
Start(Task |
Запускает Task, планируя его для выполнения в указанный TaskScheduler. (Унаследовано от Task) |
To |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Wait() |
Ожидает завершения выполнения Task. (Унаследовано от Task) |
Wait(Cancellation |
Ожидает завершения выполнения Task. Ожидание завершается, если маркер отмены отменен до завершения задачи. (Унаследовано от Task) |
Wait(Int32) |
Ожидает завершения выполнения Task в пределах указанного числа миллисекунда. (Унаследовано от Task) |
Wait(Int32, Cancellation |
Ожидает завершения выполнения Task. Ожидание завершается, если интервал времени ожидания истекает или маркер отмены отмены будет отменен до завершения задачи. (Унаследовано от Task) |
Wait(Time |
Ожидает завершения выполнения Task в течение указанного интервала времени. (Унаследовано от Task) |
Wait(Time |
Ожидает завершения выполнения Task. (Унаследовано от Task) |
Wait |
Возвращает Task<TResult>, которая завершится, когда этот Task<TResult> завершится или когда указанный CancellationToken запрос на отмену. |
Wait |
Возвращает Task, которая завершится, когда этот Task завершится или когда указанный CancellationToken запрос на отмену. (Унаследовано от Task) |
Wait |
Возвращает Task<TResult>, которая завершится, когда этот Task<TResult> завершается или когда истекает указанное время ожидания. |
Wait |
Возвращает Task, которая завершится, когда этот Task завершается или когда истекает указанное время ожидания. (Унаследовано от Task) |
Wait |
Возвращает Task<TResult>, которая завершится после завершения этого Task<TResult>, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. |
Wait |
Возвращает Task, которая завершится после завершения этого Task, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. (Унаследовано от Task) |
Wait |
Возвращает Task<TResult>, которая завершится, когда этот Task<TResult> завершается или когда истекает указанное время ожидания. |
Wait |
Возвращает Task, которая завершится, когда этот Task завершается или когда истекает указанное время ожидания. (Унаследовано от Task) |
Wait |
Возвращает Task<TResult>, которая завершится после завершения этого Task<TResult>, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. |
Wait |
Возвращает Task, которая завершится после завершения этого Task, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. (Унаследовано от Task) |
IAsync |
Возвращает WaitHandle, которую можно использовать для ожидания завершения задачи. (Унаследовано от Task) |
IAsync |
Получает указание на то, выполняется ли операция синхронно. (Унаследовано от Task) |
Wait |
Возвращает Task, которая завершится после завершения этого Task, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. |
Wait |
Возвращает Task, которая завершится после завершения этого Task, когда истекает указанное время ожидания или когда указанный CancellationToken запрашивается отмена. |
Dispatcher |
Ожидает завершения базовой DispatcherOperation на неопределенный срок. |
Dispatcher |
Ожидает завершения указанного времени базового DispatcherOperation. |
Is |
Возвращает значение, указывающее, связан ли этот Task с DispatcherOperation. |
As |
Возвращает асинхронное действие среды выполнения Windows, представляющее запущенную задачу. |
As |
Возвращает асинхронную операцию среды выполнения Windows, представляющую запущенную задачу, которая возвращает результат. |
Продукт | Версии |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1 |
UWP | 10.0 |
Все члены Task<TResult>, кроме Dispose(), являются потокобезопасными и могут использоваться одновременно из нескольких потоков.
- Task
-
библиотеки параллельных задач (TPL) - асинхронное программирование на основе задач
- примеры для параллельного программирования с помощью .NET Core и .NET Standard
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: