Task<TResult> Klasa

Definicja

Reprezentuje operację asynchroniczną, która może zwrócić wartość.

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 wyniku wygenerowanego przez ten Task<TResult>element .

Dziedziczenie
Task<TResult>

Uwagi

Klasa Task<TResult> reprezentuje pojedynczą operację, która zwraca wartość i zwykle jest wykonywana asynchronicznie. Task<TResult>obiekty są jednym z głównych składników wzorca asynchronicznego opartego na zadaniach po raz pierwszy wprowadzonego w .NET Framework 4. Ponieważ praca wykonywana przez Task<TResult> obiekt zwykle jest wykonywana asynchronicznie w wątku puli wątków, a nie synchronicznie w głównym wątku aplikacji, można użyć Status właściwości , a także IsCanceledwłaściwości , IsCompletedi IsFaulted w celu określenia stanu zadania. Najczęściej wyrażenie lambda służy do określania pracy, którą ma wykonać zadanie.

Task<TResult> wystąpienia mogą być tworzone na różne sposoby. Najbardziej typowym podejściem, które jest dostępne, począwszy od .NET Framework 4.5, jest wywołanie metody statycznej Task.Run<TResult>(Func<TResult>) lub Task.Run<TResult>(Func<TResult>, CancellationToken) . Te metody zapewniają prosty sposób uruchamiania zadania przy użyciu wartości domyślnych i bez uzyskiwania dodatkowych parametrów. W poniższym przykładzie użyto Task.Run<TResult>(Func<TResult>) metody , aby uruchomić zadanie, które wykonuje pętlę, a następnie wyświetla liczbę iteracji pętli:

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

Alternatywą i najczęstszym sposobem uruchamiania zadania w .NET Framework 4 jest wywołanie metody statycznej TaskFactory.StartNew lub TaskFactory<TResult>.StartNew . Właściwość Task.Factory zwraca TaskFactory obiekt, a Task<TResult>.Factory właściwość zwraca TaskFactory<TResult> obiekt. Przeciążenia ich StartNew metody umożliwiają przekazywanie argumentów, definiowanie opcji tworzenia zadań i określanie harmonogramu zadań. W poniższym przykładzie użyto TaskFactory<TResult>.StartNew(Func<TResult>) metody do uruchomienia zadania. Jest ona funkcjonalnie równoważna kodowi w poprzednim przykładzie.

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

Aby uzyskać więcej kompletnych przykładów, zobacz Programowanie asynchroniczne oparte na zadaniach.

Klasa Task<TResult> udostępnia również konstruktory, które inicjują zadanie, ale nie są zaplanowane do wykonania. Ze względu Task.Run na wydajność metody i Task.Factory.StartNew są preferowanymi mechanizmami tworzenia i planowania zadań obliczeniowych, ale w scenariuszach, w których tworzenie i planowanie zadań musi być oddzielone, konstruktory mogą być używane, a metoda zadania Start może być następnie używana do planowania zadania do wykonania w późniejszym czasie.

Począwszy od aplikacji klasycznych przeznaczonych dla .NET Framework 4.6, kultura wątku tworzącego i wywołującego zadanie staje się częścią kontekstu wątku. Oznacza to, że niezależnie od bieżącej kultury wątku, na którym jest wykonywane zadanie, bieżąca kultura zadania jest kulturą wątku wywołującego. W przypadku aplikacji przeznaczonych dla wersji .NET Framework przed .NET Framework 4.6 kultura zadania jest kulturą wątku, na którym jest wykonywane zadanie. Aby uzyskać więcej informacji, zobacz sekcję "Operacje asynchroniczne oparte na kulturze i zadaniach" w temacie CultureInfo . Pamiętaj, że aplikacje ze sklepu są zgodne z środowisko wykonawcze systemu Windows w ustawieniu i uzyskaniu kultury domyślnej.

W przypadku operacji, które nie zwracają wartości, należy użyć Task klasy . Począwszy od języka C# 7.0, w przypadku bardziej lekkiego zadania, które jest typem wartości, a nie typem referencyjnym, użyj System.Threading.Tasks.ValueTask<TResult> struktury.

Konstruktory

Task<TResult>(Func<Object,TResult>, Object)

Inicjuje nową Task<TResult> z określoną funkcją i stanem.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

Inicjuje nową Task<TResult> akcję, stan i opcje.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

Inicjuje nową Task<TResult> akcję, stan i opcje.

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

Inicjuje nową Task<TResult> akcję, stan i opcje.

Task<TResult>(Func<TResult>)

Inicjuje nową Task<TResult> z określoną funkcją.

Task<TResult>(Func<TResult>, CancellationToken)

Inicjuje nową Task<TResult> z określoną funkcją.

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

Inicjuje nową Task<TResult> z określoną funkcją i opcjami tworzenia.

Task<TResult>(Func<TResult>, TaskCreationOptions)

Inicjuje nową Task<TResult> z określoną funkcją i opcjami tworzenia.

Właściwości

AsyncState

Pobiera obiekt stanu podany podczas Task tworzenia lub ma wartość null, jeśli nie podano żadnego.

(Odziedziczone po Task)
CreationOptions

Pobiera element użyty do utworzenia TaskCreationOptions tego zadania.

(Odziedziczone po Task)
Exception

AggregateException Pobiera to, co spowodowało Task zakończenie przedwcześnie. Task Jeśli ukończono pomyślnie lub nie zgłosił jeszcze żadnych wyjątków, zwróci to polecenie null.

(Odziedziczone po Task)
Factory

Pobiera metodę fabryki do tworzenia i konfigurowania Task<TResult> wystąpień.

Id

Pobiera identyfikator dla tego Task wystąpienia.

(Odziedziczone po Task)
IsCanceled

Pobiera, czy to Task wystąpienie zakończyło wykonywanie z powodu anulowania.

(Odziedziczone po Task)
IsCompleted

Pobiera wartość wskazującą, czy zadanie zostało ukończone.

(Odziedziczone po Task)
IsCompletedSuccessfully

Pobiera, czy zadanie było uruchamiane do ukończenia.

(Odziedziczone po Task)
IsFaulted

Pobiera, czy ukończono Task z powodu nieobsługiwanego wyjątku.

(Odziedziczone po Task)
Result

Pobiera wartość wyniku tego Task<TResult>elementu .

Status

TaskStatus Pobiera to zadanie.

(Odziedziczone po Task)

Metody

ConfigureAwait(Boolean)

Konfiguruje program awaiter używany do oczekiwania na ten Task<TResult>element .

ConfigureAwait(Boolean)

Konfiguruje obiekt awaiter używany do oczekiwania na ten Taskelement .

(Odziedziczone po Task)
ContinueWith(Action<Task,Object>, Object)

Tworzy kontynuację, która odbiera informacje o stanie dostarczone przez obiekt wywołujący i jest wykonywana po zakończeniu działania obiektu docelowego Task .

(Odziedziczone po Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

Tworzy kontynuację, która odbiera informacje o stanie dostarczonym przez obiekt wywołujący oraz token anulowania, który jest wykonywany asynchronicznie po zakończeniu działania obiektu docelowego Task .

(Odziedziczone po Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację, która odbiera informacje o stanie dostarczonym przez obiekt wywołujący i token anulowania oraz jest wykonywana po zakończeniu działania obiektu docelowego Task . Kontynuacja jest wykonywana na podstawie zestawu określonych warunków i używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

Tworzy kontynuację, która odbiera informacje o stanie dostarczonego przez obiekt wywołujący i wykonuje je po zakończeniu działania obiektu docelowego Task . Kontynuacja jest wykonywana na podstawie zestawu określonych warunków.

(Odziedziczone po Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

Tworzy kontynuację, która odbiera informacje o stanie dostarczone przez obiekt wywołujący i wykonuje asynchronicznie po zakończeniu działania obiektu docelowego Task . Kontynuacja używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith(Action<Task<TResult>,Object>, Object)

Tworzy kontynuację przekazywaną informację o stanie i wykonywaną po zakończeniu elementu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>>)

Tworzy kontynuację wykonywaną asynchronicznie po zakończeniu zadania docelowego.

ContinueWith(Action<Task<TResult>>, CancellationToken)

Tworzy kontynuację z możliwością anulowania, która jest wykonywana asynchronicznie po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację, która jest wykonywana zgodnie z warunkiem określonym w continuationOptions.

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

Tworzy kontynuację wykonywaną zgodnie z warunkiem określonym w continuationOptionspliku .

ContinueWith(Action<Task<TResult>>, TaskScheduler)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu elementu docelowego Task<TResult> .

ContinueWith(Action<Task>)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu elementu docelowego Task .

(Odziedziczone po Task)
ContinueWith(Action<Task>, CancellationToken)

Tworzy kontynuację, która odbiera token anulowania i wykonuje asynchronicznie po zakończeniu działania obiektu docelowego Task .

(Odziedziczone po Task)
ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację wykonywaną, gdy zadanie docelowe konkuruje zgodnie z określonym TaskContinuationOptions. Kontynuacja odbiera token anulowania i używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

Tworzy kontynuację wykonywaną po zakończeniu zadania docelowego zgodnie z określonym TaskContinuationOptionselementem .

(Odziedziczone po Task)
ContinueWith(Action<Task>, TaskScheduler)

Tworzy kontynuację wykonywaną asynchronicznie po zakończeniu celu Task . Kontynuacja używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

Tworzy kontynuację wykonywaną po zakończeniu działania obiektu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu elementu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu elementu docelowego Task<TResult> .

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację, która jest wykonywana zgodnie z warunkiem określonym w continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

Tworzy kontynuację, która jest wykonywana zgodnie z warunkiem określonym w continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu elementu docelowego Task<TResult> .

ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

Tworzy kontynuację, która odbiera informacje o stanie dostarczone przez obiekt wywołujący i wykonuje asynchronicznie, gdy element docelowy Task zakończy i zwróci wartość.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu obiektu docelowego Task i zwraca wartość. Kontynuacja odbiera informacje o stanie dostarczone przez obiekt wywołujący i token anulowania.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację, która jest wykonywana na podstawie określonych opcji kontynuacji zadania, gdy element docelowy Task zakończy działanie i zwróci wartość. Kontynuacja odbiera informacje o stanie dostarczone przez obiekt wywołujący i token anulowania i używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

Tworzy kontynuację, która jest wykonywana na podstawie określonych opcji kontynuacji zadania po zakończeniu celu Task . Kontynuacja odbiera informacje o stanie dostarczone przez obiekt wywołujący.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

Tworzy kontynuację wykonywaną asynchronicznie po zakończeniu celu Task . Kontynuacja odbiera informacje o stanie dostarczone przez obiekt wywołujący i używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,TResult>)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu obiektu docelowego Task<TResult> i zwraca wartość.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu obiektu docelowego Task i zwraca wartość. Kontynuacja otrzymuje token anulowania.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Tworzy kontynuację wykonywaną zgodnie z określonymi opcjami kontynuacji i zwraca wartość. Kontynuacja jest przekazywana token anulowania i używa określonego harmonogramu.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

Tworzy kontynuację wykonywaną zgodnie z określonymi opcjami kontynuacji i zwraca wartość.

(Odziedziczone po Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

Tworzy kontynuację, która jest wykonywana asynchronicznie po zakończeniu obiektu docelowego Task i zwraca wartość. Kontynuacja używa określonego harmonogramu.

(Odziedziczone po Task)
Dispose()

Zwalnia wszystkie zasoby używane przez bieżące wystąpienie klasy Task.

(Odziedziczone po Task)
Dispose(Boolean)

Usuwa element Task, zwalniając wszystkie niezarządzane zasoby.

(Odziedziczone po Task)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetAwaiter()

Pobiera obiekt awaiter używany do oczekiwania na ten Task<TResult>element .

GetAwaiter()

Pobiera oczekiwany element służący do oczekiwania na ten Taskelement .

(Odziedziczone po Task)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
RunSynchronously()

Task Uruchamia synchronicznie TaskSchedulerbieżący element .

(Odziedziczone po Task)
RunSynchronously(TaskScheduler)

Task Uruchamia synchronicznie podany TaskScheduler element.

(Odziedziczone po Task)
Start()

Uruchamia element Task, planując wykonanie do bieżącego TaskSchedulerelementu .

(Odziedziczone po Task)
Start(TaskScheduler)

Uruchamia obiekt Task, planując wykonanie do określonego TaskSchedulerelementu .

(Odziedziczone po Task)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
Wait()

Czeka na Task zakończenie wykonywania.

(Odziedziczone po Task)
Wait(CancellationToken)

Czeka na Task zakończenie wykonywania. Oczekiwanie kończy się, jeśli token anulowania zostanie anulowany przed ukończeniem zadania.

(Odziedziczone po Task)
Wait(Int32)

Czeka na Task ukończenie wykonywania w ramach określonej liczby milisekund.

(Odziedziczone po Task)
Wait(Int32, CancellationToken)

Czeka na Task zakończenie wykonywania. Oczekiwanie kończy się, jeśli upłynie interwał limitu czasu lub token anulowania zostanie anulowany przed zakończeniem zadania.

(Odziedziczone po Task)
Wait(TimeSpan)

Oczekuje na Task ukończenie wykonywania w określonym przedziale czasu.

(Odziedziczone po Task)
WaitAsync(CancellationToken)

Pobiera element Task<TResult> , który zostanie ukończony po Task<TResult> zakończeniu lub po żądaniu anulowania określonego CancellationToken .

WaitAsync(CancellationToken)

Pobiera element Task , który zostanie ukończony po Task zakończeniu lub po żądaniu anulowania określonego CancellationToken .

(Odziedziczone po Task)
WaitAsync(TimeSpan)

Pobiera element Task<TResult> , który zostanie ukończony po Task<TResult> zakończeniu lub upływie określonego limitu czasu.

WaitAsync(TimeSpan)

Pobiera element Task , który zostanie ukończony po Task zakończeniu lub upływie określonego limitu czasu.

(Odziedziczone po Task)
WaitAsync(TimeSpan, CancellationToken)

Pobiera element Task<TResult> , który zostanie ukończony po Task<TResult> zakończeniu, upływie określonego limitu czasu lub po żądaniu anulowania określonego CancellationToken limitu czasu.

WaitAsync(TimeSpan, CancellationToken)

Pobiera element Task , który zostanie ukończony po Task zakończeniu, po upływie określonego limitu czasu lub po żądaniu anulowania określonego CancellationToken limitu czasu.

(Odziedziczone po Task)

Jawne implementacje interfejsu

IAsyncResult.AsyncWaitHandle

Pobiera element WaitHandle , który może służyć do oczekiwania na ukończenie zadania.

(Odziedziczone po Task)
IAsyncResult.CompletedSynchronously

Pobiera wskazanie, czy operacja została ukończona synchronicznie.

(Odziedziczone po Task)

Metody rozszerzania

DispatcherOperationWait(Task)

Czas oczekiwania na ukończenie bazowego DispatcherOperation .

DispatcherOperationWait(Task, TimeSpan)

Czeka na określoną ilość czasu na ukończenie bazowego DispatcherOperation .

IsDispatcherOperationTask(Task)

Zwraca wartość wskazującą, czy jest to Task skojarzone z elementem DispatcherOperation.

AsAsyncAction(Task)

Zwraca akcję asynchroniczną Windows runtime, która reprezentuje uruchomione zadanie.

AsAsyncOperation<TResult>(Task<TResult>)

Zwraca asynchroniczną Windows runtime, która reprezentuje uruchomione zadanie, które zwraca wynik.

Dotyczy

Bezpieczeństwo wątkowe

Wszystkie elementy członkowskie , Task<TResult>z wyjątkiem , Dispose()są bezpieczne wątkowo i mogą być używane jednocześnie z wielu wątków.

Zobacz też