Task<TResult> Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un'operazione asincrona che può restituire un valore.
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
Parametri di tipo
- TResult
Tipo del risultato prodotto da questo Task<TResult>oggetto .
- Ereditarietà
Commenti
La Task<TResult> classe rappresenta una singola operazione che restituisce un valore e che in genere viene eseguita in modo asincrono. Task<TResult> gli oggetti sono uno dei componenti centrali del modello asincrono basato su attività introdotto in .NET Framework 4. Poiché il lavoro eseguito da un Task<TResult> oggetto viene in genere eseguito in modo asincrono su un thread del pool di thread anziché in modo sincrono sul thread dell'applicazione principale, è possibile usare la Status proprietà , nonché le IsCanceledproprietà , IsCompletede IsFaulted per determinare lo stato di un'attività. In genere, un'espressione lambda viene usata per specificare il lavoro che l'attività deve eseguire.
Task<TResult> Le istanze possono essere create in diversi modi. L'approccio più comune, disponibile a partire da .NET Framework 4.5, consiste nel chiamare il metodo statico Task.Run<TResult>(Func<TResult>) o Task.Run<TResult>(Func<TResult>, CancellationToken) . Questi metodi offrono un modo semplice per avviare un'attività usando i valori predefiniti e senza acquisire parametri aggiuntivi. Nell'esempio seguente viene usato il Task.Run<TResult>(Func<TResult>) metodo per avviare un'attività che esegue un ciclo e quindi viene visualizzato il numero di iterazioni del ciclo:
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
Un'alternativa e il modo più comune per avviare un'attività in .NET Framework 4 consiste nel chiamare il metodo o TaskFactory<TResult>.StartNew staticoTaskFactory.StartNew. La Task.Factory proprietà restituisce un TaskFactory oggetto e la Task<TResult>.Factory proprietà restituisce un TaskFactory<TResult> oggetto . Gli overload del StartNew metodo consentono di passare argomenti, definire le opzioni di creazione delle attività e specificare un'utilità di pianificazione. Nell'esempio seguente viene utilizzato il TaskFactory<TResult>.StartNew(Func<TResult>) metodo per avviare un'attività. È funzionalmente equivalente al codice nell'esempio precedente.
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
Per esempi più completi, vedere Programmazione asincrona basata su attività.
La Task<TResult> classe fornisce anche costruttori che inizializzano l'attività, ma che non lo pianificano per l'esecuzione. Per motivi di prestazioni, i Task.Run metodi e Task.Factory.StartNew sono i meccanismi preferiti per la creazione e la pianificazione delle attività di calcolo, ma per gli scenari in cui la creazione e la pianificazione delle attività devono essere separate, i costruttori possono essere usati e il metodo dell'attività Start può quindi essere usato per pianificare l'attività per l'esecuzione in un secondo momento.
A partire dalle app desktop che puntano a .NET Framework 4.6, la cultura del thread che crea e invoca un compito diventa parte del contesto del thread. Ovvero, indipendentemente dalle impostazioni cultura correnti del thread in cui viene eseguita l'attività, le impostazioni cultura correnti dell'attività sono le impostazioni cultura del thread chiamante. Per le app destinate alle versioni di .NET Framework precedenti a .NET Framework 4.6, la cultura dell'attività è la cultura del thread su cui viene eseguita l'attività. Per ulteriori informazioni, vedere la sezione "Cultura e operazioni asincrone basate su attività" nell'argomento CultureInfo. Tieni presente che le app dello Store seguono Windows Runtime nell'impostazione e ottengono le impostazioni cultura predefinite.
Per le operazioni che non restituiscono un valore, usare la Task classe . A partire da C# 7.0, per un'attività più leggera che è un tipo valore anziché un tipo riferimento, usare la System.Threading.Tasks.ValueTask<TResult> struttura .
Costruttori
| Nome | Descrizione |
|---|---|
| Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions) |
Inizializza un nuovo Task<TResult> oggetto con l'azione, lo stato e le opzioni specificati. |
| Task<TResult>(Func<Object,TResult>, Object, CancellationToken) |
Inizializza un nuovo Task<TResult> oggetto con l'azione, lo stato e le opzioni specificati. |
| Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions) |
Inizializza un nuovo Task<TResult> oggetto con l'azione, lo stato e le opzioni specificati. |
| Task<TResult>(Func<Object,TResult>, Object) |
Inizializza un nuovo Task<TResult> oggetto con la funzione e lo stato specificati. |
| Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions) |
Inizializza un nuovo Task<TResult> oggetto con le opzioni di creazione e funzione specificate. |
| Task<TResult>(Func<TResult>, CancellationToken) |
Inizializza un nuovo Task<TResult> oggetto con la funzione specificata. |
| Task<TResult>(Func<TResult>, TaskCreationOptions) |
Inizializza un nuovo Task<TResult> oggetto con le opzioni di creazione e funzione specificate. |
| Task<TResult>(Func<TResult>) |
Inizializza un nuovo Task<TResult> oggetto con la funzione specificata. |
Proprietà
| Nome | Descrizione |
|---|---|
| AsyncState |
Ottiene l'oggetto di stato fornito quando Task è stato creato o null se non è stato specificato alcun oggetto. (Ereditato da Task) |
| CreationOptions |
Ottiene l'oggetto TaskCreationOptions utilizzato per creare questa attività. (Ereditato da Task) |
| Exception |
Ottiene l'oggetto AggregateException che ha causato la fine prematura dell'oggetto Task . Se l'oggetto Task completato correttamente o non ha ancora generato eccezioni, verrà restituito |
| Factory |
Ottiene un metodo factory per la creazione e la configurazione di Task<TResult> istanze. |
| Id |
Ottiene un ID per questa Task istanza. (Ereditato da Task) |
| IsCanceled |
Ottiene un valore che indica se l'esecuzione Task dell'istanza è stata completata a causa dell'annullamento. (Ereditato da Task) |
| IsCompleted |
Ottiene un valore che indica se l'attività è stata completata. (Ereditato da Task) |
| IsCompletedSuccessfully |
Ottiene un valore che indica se l'attività è stata eseguita fino al completamento. (Ereditato da Task) |
| IsFaulted |
Ottiene un valore che indica se l'oggetto è stato completato a causa di un'eccezione Task non gestita. (Ereditato da Task) |
| Result |
Ottiene il valore del risultato dell'oggetto Task<TResult>. |
| Status |
Ottiene l'oggetto TaskStatus di questa attività. (Ereditato da Task) |
Metodi
| Nome | Descrizione |
|---|---|
| ConfigureAwait(Boolean) |
Configura un awaiter usato per attendere questo Task<TResult>oggetto . |
| ConfigureAwait(ConfigureAwaitOptions) |
Configura un awaiter usato per attendere questo Taskoggetto . |
| ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e un token di annullamento che viene eseguito al termine della destinazione Task . La continuazione viene eseguita in base a un set di condizioni specificate e usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith(Action<Task,Object>, Object, CancellationToken) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e un token di annullamento che viene eseguito in modo asincrono al termine della destinazione Task . (Ereditato da Task) |
| ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e viene eseguita al termine della destinazione Task . La continuazione viene eseguita in base a un set di condizioni specificate. (Ereditato da Task) |
| ContinueWith(Action<Task,Object>, Object, TaskScheduler) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e viene eseguita in modo asincrono al termine della destinazione Task . La continuazione usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith(Action<Task,Object>, Object) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e viene eseguita al termine della destinazione Task . (Ereditato da Task) |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>,Object>, Object) |
Crea una continuazione che viene passata alle informazioni sullo stato e che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che viene eseguita in base alla condizione specificata in |
| ContinueWith(Action<Task<TResult>>, CancellationToken) |
Crea una continuazione annullabile che viene eseguita in modo asincrono al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>>, TaskContinuationOptions) |
Crea una continuazione che viene eseguita in base alla condizione specificata in |
| ContinueWith(Action<Task<TResult>>, TaskScheduler) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task<TResult> . |
| ContinueWith(Action<Task<TResult>>) |
Crea una continuazione che viene eseguita in modo asincrono al termine dell'attività di destinazione. |
| ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che viene eseguita quando l'attività di destinazione compete in base all'oggetto specificato TaskContinuationOptions. La continuazione riceve un token di annullamento e usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith(Action<Task>, CancellationToken) |
Crea una continuazione che riceve un token di annullamento ed esegue in modo asincrono al termine della destinazione Task . (Ereditato da Task) |
| ContinueWith(Action<Task>, TaskContinuationOptions) |
Crea una continuazione che viene eseguita quando l'attività di destinazione viene completata in base all'oggetto specificato TaskContinuationOptions. (Ereditato da Task) |
| ContinueWith(Action<Task>, TaskScheduler) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task . La continuazione usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith(Action<Task>) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task . (Ereditato da Task) |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object) |
Crea una continuazione che viene eseguita al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione che viene eseguita in base alla condizione specificata in |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions) |
Crea una continuazione che viene eseguita in base alla condizione specificata in |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task<TResult> . |
| ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task<TResult> . |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione eseguita in base alle opzioni di continuazione dell'attività specificate al termine della destinazione Task e restituisce un valore. La continuazione riceve informazioni sullo stato fornite dal chiamante e un token di annullamento e usa l'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task e restituisce un valore. La continuazione riceve informazioni sullo stato fornite dal chiamante e un token di annullamento. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions) |
Crea una continuazione che viene eseguita in base alle opzioni di continuazione dell'attività specificate al termine della destinazione Task . La continuazione riceve informazioni sullo stato fornite dal chiamante. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task . La continuazione riceve informazioni sullo stato fornite dal chiamante e usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,Object,TResult>, Object) |
Crea una continuazione che riceve informazioni sullo stato fornite dal chiamante e viene eseguita in modo asincrono al termine della destinazione Task e restituisce un valore. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Crea una continuazione eseguita in base alle opzioni di continuazione specificate e restituisce un valore. La continuazione viene passata a un token di annullamento e usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,TResult>, CancellationToken) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task e restituisce un valore. La continuazione riceve un token di annullamento. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions) |
Crea una continuazione eseguita in base alle opzioni di continuazione specificate e restituisce un valore. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task e restituisce un valore. La continuazione usa un'utilità di pianificazione specificata. (Ereditato da Task) |
| ContinueWith<TResult>(Func<Task,TResult>) |
Crea una continuazione che viene eseguita in modo asincrono al termine della destinazione Task<TResult> e restituisce un valore. (Ereditato da Task) |
| Dispose() |
Rilascia tutte le risorse usate dall'istanza corrente della Task classe . (Ereditato da Task) |
| Dispose(Boolean) |
Elimina , Taskrilasciando tutte le risorse non gestite. (Ereditato da Task) |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| GetAwaiter() |
Ottiene un awaiter utilizzato per attendere questo Task<TResult>oggetto . |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| RunSynchronously() |
Esegue in Task modo sincrono sull'oggetto corrente TaskScheduler. (Ereditato da Task) |
| RunSynchronously(TaskScheduler) |
Esegue l'oggetto Task in modo sincrono sull'oggetto TaskScheduler fornito. (Ereditato da Task) |
| Start() |
Avvia , Taskpianificandolo per l'esecuzione nell'oggetto corrente TaskScheduler. (Ereditato da Task) |
| Start(TaskScheduler) |
Avvia , Taskpianificandolo per l'esecuzione nell'oggetto specificato TaskScheduler. (Ereditato da Task) |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
| Wait() |
Attende il completamento dell'esecuzione Task . (Ereditato da Task) |
| Wait(CancellationToken) |
Attende il completamento dell'esecuzione Task . L'attesa termina se un token di annullamento viene annullato prima del completamento dell'attività. (Ereditato da Task) |
| Wait(Int32, CancellationToken) |
Attende il completamento dell'esecuzione Task . L'attesa termina se un intervallo di timeout è trascorso o un token di annullamento viene annullato prima del completamento dell'attività. (Ereditato da Task) |
| Wait(Int32) |
Attende il completamento dell'esecuzione Task entro un numero specificato di millisecondi. (Ereditato da Task) |
| Wait(TimeSpan, CancellationToken) |
Attende il completamento dell'esecuzione Task . (Ereditato da Task) |
| Wait(TimeSpan) |
Attende il completamento dell'esecuzione Task entro un intervallo di tempo specificato. (Ereditato da Task) |
| WaitAsync(CancellationToken) |
Ottiene un oggetto Task<TResult> che verrà completato al Task<TResult> termine dell'operazione o quando è stato richiesto l'annullamento specificato CancellationToken . |
| WaitAsync(TimeSpan, CancellationToken) |
Ottiene un oggetto Task<TResult> che verrà completato al Task<TResult> termine dell'operazione, alla scadenza del timeout specificato o alla richiesta di annullamento dell'oggetto specificato CancellationToken . |
| WaitAsync(TimeSpan, TimeProvider, CancellationToken) |
Ottiene un oggetto Task<TResult> che verrà completato al Task<TResult> termine dell'operazione, alla scadenza del timeout specificato o alla richiesta di annullamento dell'oggetto specificato CancellationToken . |
| WaitAsync(TimeSpan, TimeProvider) |
Ottiene un oggetto Task<TResult> che verrà completato al Task<TResult> termine o alla scadenza del timeout specificato. |
| WaitAsync(TimeSpan) |
Ottiene un oggetto Task<TResult> che verrà completato al Task<TResult> termine o alla scadenza del timeout specificato. |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IAsyncResult.AsyncWaitHandle |
Ottiene un WaitHandle oggetto che può essere utilizzato per attendere il completamento dell'attività. (Ereditato da Task) |
| IAsyncResult.CompletedSynchronously |
Ottiene un'indicazione di se l'operazione è stata completata in modo sincrono. (Ereditato da Task) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| AsAsyncAction(Task) |
Restituisce un'azione asincrona di Windows Runtime che rappresenta un'attività avviata. |
| AsAsyncOperation<TResult>(Task<TResult>) |
Restituisce un'operazione asincrona di Windows Runtime che rappresenta un'attività avviata che restituisce un risultato. |
| DispatcherOperationWait(Task, TimeSpan) |
Attende il tempo specificato per il completamento dell'oggetto sottostante DispatcherOperation . |
| DispatcherOperationWait(Task) |
Attende il completamento indefinito dell'oggetto sottostante DispatcherOperation . |
| IsDispatcherOperationTask(Task) |
Restituisce un valore che indica se l'oggetto Task è associato a un oggetto DispatcherOperation. |
Si applica a
Thread safety
Tutti i membri di , ad eccezione Dispose()di Task<TResult>, sono thread-safe e possono essere usati contemporaneamente da più thread.