Sdílet prostřednictvím


Task<TResult> Třída

Definice

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
Task<TResult>

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í nullse .

(Zděděno od Task)
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 continuationOptions.

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 continuationOptions.

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 continuationOptions.

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 continuationOptions.

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ě.

Viz také