Task<TResult> Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje asynchronní operaci, která může vrátit hodnotu.
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
Parametry typu
- TResult
Typ výsledku vytvořeného tímto Task<TResult>způsobem .
- Dědičnost
Poznámky
Třída Task<TResult> představuje jednu operaci, která vrací hodnotu a která se obvykle spouští asynchronně. Task<TResult> objekty jsou jednou z centrálních komponent asynchronního vzoru založeného na úlohách , které byly poprvé zavedeny v rozhraní .NET Framework 4. Vzhledem k tomu, že práce prováděná objektem Task<TResult> se obvykle provádí asynchronně ve vlákně fondu vláken namísto synchronně v hlavním vlákně aplikace, můžete použít Status vlastnost, stejně IsCanceledjako , IsCompleteda IsFaulted vlastnosti, určit stav úlohy. Nejčastěji se výraz lambda používá k určení práce, kterou má úkol provést.
Task<TResult> instance mohou být vytvořeny různými způsoby. Nejběžnějším přístupem, který je k dispozici od rozhraní .NET Framework 4.5, je volání statické Task.Run<TResult>(Func<TResult>) metody nebo Task.Run<TResult>(Func<TResult>, CancellationToken) metody. Tyto metody poskytují jednoduchý způsob, jak spustit úlohu pomocí výchozích hodnot a bez získání dalších parametrů. Následující příklad používá metodu Task.Run<TResult>(Func<TResult>) ke spuštění úlohy, která opakuje smyčku a poté zobrazí počet jejích iterací:
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
Alternativou a nejběžnějším způsobem spuštění úlohy v rozhraní .NET Framework 4 je volání statické TaskFactory.StartNew metody nebo TaskFactory<TResult>.StartNew metody. Vlastnost Task.Factory vrátí TaskFactory objekt a Task<TResult>.Factory vlastnost vrátí TaskFactory<TResult> objekt. Přetížení jejich StartNew metody umožňují předat argumenty, definovat možnosti vytváření úkolů a zadat plánovač úloh. Následující příklad používá metodu TaskFactory<TResult>.StartNew(Func<TResult>) ke spuštění úkolu. Funkčně odpovídá kódu v předchozím příkladu.
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
Podrobnější příklady najdete v tématu Asynchronní programování založené na úlohách.
Třída Task<TResult> také poskytuje konstruktory, které inicializují úlohu, ale neplánují ji pro spuštění. Z důvodů výkonu jsou tyto Task.Run a Task.Factory.StartNew metody upřednostňovaným mechanismem pro vytváření a plánování výpočetních úloh, ale ve scénářích, ve kterých je nutné oddělit vytváření a plánování úkolů, mohou být použity konstruktory a metoda úlohy Start se pak může použít k naplánování provádění úkolu později.
Počínaje desktopovými aplikacemi, které cílí na .NET Framework 4.6, se kultura vlákna, která vytváří a vyvolává úlohu, stane součástí kontextu vlákna. To znamená, že bez ohledu na aktuální jazykovou verzi vlákna, na kterém je úloha spuštěna, aktuální jazyková verze úlohy je jazyková verze volajícího vlákna. Pro aplikace, které cílí na verze rozhraní .NET Framework před rozhraním .NET Framework 4.6, je jazyková verze úlohy jazykovou verzí vlákna, na kterém se úloha spouští. Další informace najdete v části Kulturní prostředí a asynchronní operace cílené na úkoly v CultureInfo tématu. Aplikace pro Store se řídí nastavením prostředí Windows Runtime a získávají výchozí jazykovou verzi.
Pro operace, které nevrací hodnotu, použijte Task třídu. Počínaje jazykem C# 7.0 použijte strukturu pro jednodušší úlohu, která je typ hodnoty, nikoli typ odkazu System.Threading.Tasks.ValueTask<TResult> .
Konstruktory
| Name | Description |
|---|---|
| Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions) |
Inicializuje novou Task<TResult> se zadanou akcí, stavem a možnostmi. |
| Task<TResult>(Func<Object,TResult>, Object, CancellationToken) |
Inicializuje novou Task<TResult> se zadanou akcí, stavem a možnostmi. |
| Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions) |
Inicializuje novou Task<TResult> se zadanou akcí, stavem a možnostmi. |
| Task<TResult>(Func<Object,TResult>, Object) |
Inicializuje novou Task<TResult> se zadanou funkcí a stavem. |
| Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions) |
Inicializuje novou Task<TResult> se zadanou funkcí a možnostmi vytvoření. |
| Task<TResult>(Func<TResult>, CancellationToken) |
Inicializuje novou Task<TResult> se zadanou funkcí. |
| Task<TResult>(Func<TResult>, TaskCreationOptions) |
Inicializuje novou Task<TResult> se zadanou funkcí a možnostmi vytvoření. |
| Task<TResult>(Func<TResult>) |
Inicializuje novou Task<TResult> se zadanou funkcí. |
Vlastnosti
| Name | Description |
|---|---|
| AsyncState |
Získá stav objekt zadaný při Task vytvoření, nebo null pokud nebyla zadána. (Zděděno od Task) |
| CreationOptions |
TaskCreationOptions Získá použitou k vytvoření tohoto úkolu. (Zděděno od Task) |
| Exception |
AggregateException Získá to, co způsobilo Task ukončení předčasně. Pokud se Task dokončení úspěšně dokončilo nebo ještě nevyvolá žádné výjimky, vrátí |
| Factory |
Získá metodu továrny pro vytváření a konfiguraci Task<TResult> instancí. |
| Id |
Získá ID pro tuto Task instanci. (Zděděno od Task) |
| IsCanceled |
Získá, zda tato Task instance dokončila provádění z důvodu zrušení. (Zděděno od Task) |
| IsCompleted |
Získá hodnotu, která označuje, zda úkol byl dokončen. (Zděděno od Task) |
| IsCompletedSuccessfully |
Získá, zda úkol běžel na dokončení. (Zděděno od Task) |
| IsFaulted |
Získá, zda dokončeno Task kvůli neošetřené výjimce. (Zděděno od Task) |
| Result |
Získá výslednou hodnotu tohoto Task<TResult>. |
| Status |
TaskStatus Získá tento úkol. (Zděděno od Task) |
Metody
| Name | Description |
|---|---|
| ConfigureAwait(Boolean) |
Konfiguruje awaiter použitý k tomuto .Task<TResult> |
| ConfigureAwait(ConfigureAwaitOptions) |
Konfiguruje awaiter použitý k tomuto .Task |
| ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které přijímá informace o stavu zadané volajícím a token zrušení a který se spustí po dokončení cíle Task . Pokračování se provede na základě sady zadaných podmínek a použije zadaný plánovač. (Zděděno od Task) |
| ContinueWith(Action<Task,Object>, Object, CancellationToken) |
Vytvoří pokračování, které přijímá informace o stavu zadané volajícím a token zrušení a který se provede asynchronně po dokončení cíle Task . (Zděděno od Task) |
| ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions) |
Vytvoří pokračování, které obdrží informace o stavu zadané volajícím a spustí se po dokončení cíle Task . Pokračování se provede na základě sady zadaných podmínek. (Zděděno od Task) |
| ContinueWith(Action<Task,Object>, Object, TaskScheduler) |
Vytvoří pokračování, které obdrží informace o stavu zadané volajícím a spustí se asynchronně po dokončení cíle Task . Pokračování používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith(Action<Task,Object>, Object) |
Vytvoří pokračování, které obdrží informace o stavu zadané volajícím a spustí se po dokončení cíle Task . (Zděděno od Task) |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object) |
Vytvoří pokračování, které se předá informace o stavu a které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se provede podle podmínky zadané v |
| ContinueWith(Action<Task<TResult>>, CancellationToken) |
Vytvoří zrušené pokračování, které se provede asynchronně po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, TaskContinuationOptions) |
Vytvoří pokračování, které se provede podle podmínky zadané v |
| ContinueWith(Action<Task<TResult>>, TaskScheduler) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task<TResult> . |
| ContinueWith(Action<Task<TResult>>) |
Vytvoří pokračování, které se provede asynchronně po dokončení cílové úlohy. |
| ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se provede, když cílová úloha konkuruje podle zadaného TaskContinuationOptions. Pokračování obdrží token zrušení a použije zadaný plánovač. (Zděděno od Task) |
| ContinueWith(Action<Task>, CancellationToken) |
Vytvoří pokračování, které obdrží token zrušení, asynchronně se spustí po dokončení cíle Task . (Zděděno od Task) |
| ContinueWith(Action<Task>, TaskContinuationOptions) |
Vytvoří pokračování, které se spustí při dokončení cílové úlohy podle zadaného TaskContinuationOptions. (Zděděno od Task) |
| ContinueWith(Action<Task>, TaskScheduler) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task . Pokračování používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith(Action<Task>) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task . (Zděděno od Task) |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object) |
Vytvoří pokračování, které se spustí po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se provede podle podmínky zadané v |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions) |
Vytvoří pokračování, které se provede podle podmínky zadané v |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task<TResult> . |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se spustí na základě zadaných možností pokračování úkolu po dokončení cíle Task a vrátí hodnotu. Pokračování přijímá informace o stavu zadaném volajícím a token zrušení a používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task a vrátí hodnotu. Pokračování obdrží informace o stavu zadané volajícím a token zrušení. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions) |
Vytvoří pokračování, které se spustí na základě zadaných možností pokračování úkolu po dokončení cíle Task . Pokračování obdrží informace o stavu zadané volajícím. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task . Pokračování přijímá informace o stavu zadané volajícím a používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object) |
Vytvoří pokračování, které obdrží informace o stavu zadané volajícím a spustí asynchronně po dokončení cíle Task a vrátí hodnotu. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Vytvoří pokračování, které se provede podle zadaných možností pokračování a vrátí hodnotu. Pokračování se předává token zrušení a používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task a vrátí hodnotu. Pokračování obdrží token zrušení. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions) |
Vytvoří pokračování, které se provede podle zadaných možností pokračování a vrátí hodnotu. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task a vrátí hodnotu. Pokračování používá zadaný plánovač. (Zděděno od Task) |
| ContinueWith<TResult>(Func<Task,TResult>) |
Vytvoří pokračování, které se provede asynchronně po dokončení cíle Task<TResult> a vrátí hodnotu. (Zděděno od Task) |
| Dispose() |
Uvolní všechny prostředky používané aktuální instancí Task třídy. (Zděděno od Task) |
| Dispose(Boolean) |
TaskUvolní všechny jeho nespravované prostředky. (Zděděno od Task) |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetAwaiter() |
Získá awaiter sloužící k čekacímu Task<TResult>objektu . |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| RunSynchronously() |
Task Spouští synchronně na aktuálním TaskScheduler. (Zděděno od Task) |
| RunSynchronously(TaskScheduler) |
Task Spustí synchronně na zadaném TaskScheduler počítači. (Zděděno od Task) |
| Start() |
TaskSpustí , plánování spuštění na aktuální TaskScheduler. (Zděděno od Task) |
| Start(TaskScheduler) |
TaskSpustí , plánování spuštění do zadaného TaskScheduler. (Zděděno od Task) |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
| Wait() |
Čeká na Task dokončení provádění. (Zděděno od Task) |
| Wait(CancellationToken) |
Čeká na Task dokončení provádění. Čekání se ukončí, pokud se před dokončením úlohy zruší token zrušení. (Zděděno od Task) |
| Wait(Int32, CancellationToken) |
Čeká na Task dokončení provádění. Čekání se ukončí, pokud se před dokončením úkolu zruší časový limit nebo se zruší token zrušení. (Zděděno od Task) |
| Wait(Int32) |
Čeká na Task dokončení provádění v zadaném počtu milisekund. (Zděděno od Task) |
| Wait(TimeSpan, CancellationToken) |
Čeká na Task dokončení provádění. (Zděděno od Task) |
| Wait(TimeSpan) |
Čeká na Task dokončení provádění v zadaném časovém intervalu. (Zděděno od Task) |
| WaitAsync(CancellationToken) |
Task<TResult> Získá, který se dokončí po dokončení nebo Task<TResult> když zadaný CancellationToken požadavek na zrušení. |
| WaitAsync(TimeSpan, CancellationToken) |
Task<TResult> Získá, který se dokončí po dokončení, Task<TResult> po vypršení zadaného časového limitu nebo po CancellationToken zadání požadavku na zrušení. |
| WaitAsync(TimeSpan, TimeProvider, CancellationToken) |
Task<TResult> Získá, který se dokončí po dokončení, Task<TResult> po vypršení zadaného časového limitu nebo po CancellationToken zadání požadavku na zrušení. |
| WaitAsync(TimeSpan, TimeProvider) |
Task<TResult> Získá, který se dokončí po dokončení nebo Task<TResult> po vypršení zadaného časového limitu. |
| WaitAsync(TimeSpan) |
Task<TResult> Získá, který se dokončí po dokončení nebo Task<TResult> po vypršení zadaného časového limitu. |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IAsyncResult.AsyncWaitHandle |
WaitHandle Získá, který lze použít k čekání na dokončení úkolu. (Zděděno od Task) |
| IAsyncResult.CompletedSynchronously |
Získá indikaci, zda operace byla dokončena synchronně. (Zděděno od Task) |
Metody rozšíření
| Name | Description |
|---|---|
| AsAsyncAction(Task) |
Vrátí asynchronní akci prostředí Windows Runtime, která představuje spuštěnou úlohu. |
| AsAsyncOperation<TResult>(Task<TResult>) |
Vrátí asynchronní operaci prostředí Windows Runtime, která představuje spuštěnou úlohu, která vrací výsledek. |
| DispatcherOperationWait(Task, TimeSpan) |
Počká na dobu, po kterou se podkladová DispatcherOperation hodnota dokončí. |
| DispatcherOperationWait(Task) |
Čeká po neomezenou dobu, než se podkladová DispatcherOperation hodnota dokončí. |
| IsDispatcherOperationTask(Task) |
Vrátí hodnotu, která určuje, zda je tato Task hodnota přidružena k DispatcherOperation. |
Platí pro
Bezpečný přístup z více vláken
Všechny členy Task<TResult>, s výjimkou Dispose(), jsou bezpečné pro přístup z více vláken a mohou být použity z více vláken současně.