Condividi tramite


TaskFactory<TResult> Classe

Definizione

Fornisce supporto per la creazione e la pianificazione di Task<TResult> oggetti.

generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)

Parametri di tipo

TResult

Valore restituito degli Task<TResult> oggetti creati dai metodi di questa classe.

Ereditarietà
TaskFactory<TResult>

Esempio

Nell'esempio seguente viene utilizzata la proprietà statica Factory per effettuare due chiamate al TaskFactory<TResult>.StartNew metodo . La prima attività restituisce una matrice di stringhe popolata con i nomi dei file nella directory MyDocuments dell'utente, mentre la seconda restituisce una matrice di stringhe popolata con i nomi delle sottodirectory della directory MyDocuments dell'utente. Chiama quindi il TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) metodo , che visualizza informazioni sul numero di file e directory nelle matrici restituite dalle due attività dopo aver completato l'esecuzione.

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task<string[]>[] tasks = new Task<string[]>[2];
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task<string[]>.Factory.StartNew( () => Directory.GetFiles(docsDirectory));
      tasks[1] = Task<string[]>.Factory.StartNew( () => Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", tasks[1].Result.Length);
                                             Console.WriteLine("   {0} files", tasks[0].Result.Length);
                                          } );
   }
}
// The example displays output like the following:
//       C:\Users\<username>\Documents contains:
//          24 subdirectories
//          16 files
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks(1) As Task(Of String())
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task(Of String()).Factory.StartNew( Function()Directory.GetFiles(docsDirectory) )
''                                        End Sub )
      tasks(1) = Task(Of String()).Factory.StartNew( Function() Directory.GetDirectories(docsDirectory) )
''                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", tasks(1).Result.Length)
                                             Console.WriteLine("   {0} files", tasks(0).Result.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

Commenti

.NET offre due factory per la creazione e la pianificazione di attività:

La TaskFactory<TResult> classe consente di eseguire le operazioni seguenti:

  • Creare un'attività e avviarla immediatamente chiamando il StartNew metodo . È possibile chiamare gli overload di questo metodo per creare ed eseguire un'attività che richiede argomenti non predefiniti.

    Avviso

    A partire da .NET Framework 4.5, il Task.Run metodo offre il modo più semplice per creare un'attività con valori di configurazione predefiniti e avviarla immediatamente.

  • Creare un'attività che viene avviata quando una delle attività in una matrice è stata completata chiamando il ContinueWhenAny metodo o ContinueWhenAny .

  • Creare un'attività che viene avviata quando tutte le attività in una matrice sono state completate chiamando il ContinueWhenAll metodo o ContinueWhenAll .

La proprietà statica Task<TResult>.Factory restituisce un oggetto predefinito TaskFactory<TResult> . È anche possibile chiamare uno dei TaskFactory<TResult> costruttori di classi per configurare gli Task<TResult> oggetti creati dalla TaskFactory<TResult> classe. Nell'esempio seguente viene configurato un nuovo TaskFactory<TResult> oggetto per creare attività con un token di annullamento, opzioni di creazione delle attività, opzioni di continuazione e un'utilità di pianificazione personalizzata.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory<int> factory = new TaskFactory<int>(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static int DoWork()
   {
       /*...*/
       return DateTime.Now.Hour <= 12 ?  1 : 2;
    }
}
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim cts As New CancellationTokenSource()
      Dim factory As New TaskFactory(Of Integer)(
                         cts.Token,
                         TaskCreationOptions.PreferFairness,
                         TaskContinuationOptions.ExecuteSynchronously,
                         New CustomScheduler())

      Dim t2 = factory.StartNew(Function() DoWork())
      cts.Dispose()
   End Sub

   Function DoWork() As Integer
      Return If(Date.Now.Hour <= 12, 1, 2)
   End Function
End Module

Nella maggior parte dei casi, non è necessario creare un'istanza di una nuova TaskFactory<TResult> istanza. È invece possibile utilizzare la proprietà statica Task<TResult>.Factory , che restituisce un oggetto factory che utilizza valori predefiniti. È quindi possibile chiamare i relativi metodi per avviare nuove attività o definire le continuazioni delle attività. Per un'illustrazione, vedere l'esempio.

Costruttori

Nome Descrizione
TaskFactory<TResult>()

Inizializza un'istanza TaskFactory<TResult> con la configurazione predefinita.

TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

Inizializza un'istanza TaskFactory<TResult> con la configurazione specificata.

TaskFactory<TResult>(CancellationToken)

Inizializza un'istanza TaskFactory<TResult> con la configurazione predefinita.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

Inizializza un'istanza TaskFactory<TResult> con la configurazione specificata.

TaskFactory<TResult>(TaskScheduler)

Inizializza un'istanza TaskFactory<TResult> con la configurazione specificata.

Proprietà

Nome Descrizione
CancellationToken

Ottiene il token di annullamento predefinito per questa factory di attività.

ContinuationOptions

Ottiene il TaskContinuationOptions valore di enumerazione per questa factory di attività.

CreationOptions

Ottiene il TaskCreationOptions valore di enumerazione per questa factory di attività.

Scheduler

Ottiene l'utilità di pianificazione per questa factory di attività.

Metodi

Nome Descrizione
ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll(Task[], Func<Task[],TResult>, TaskContinuationOptions)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll(Task[], Func<Task[],TResult>)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

Crea un'attività di continuazione che verrà avviata al completamento di un set di attività fornite.

ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny(Task[], Func<Task,TResult>, TaskContinuationOptions)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny(Task[], Func<Task,TResult>)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

Crea un'attività di continuazione che verrà avviata al completamento di qualsiasi attività nel set specificato.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

Crea un'attività che esegue una funzione del metodo finale al completamento di un oggetto specificato IAsyncResult .

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

Crea un'attività che esegue una funzione del metodo finale al completamento di un oggetto specificato IAsyncResult .

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

Crea un'attività che esegue una funzione del metodo finale al completamento di un oggetto specificato IAsyncResult .

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

Crea un'attività che rappresenta una coppia di metodi begin e end conformi al modello modello di programmazione asincrona.

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)
StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Crea e avvia un'attività.

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

Crea e avvia un'attività.

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

Crea e avvia un'attività.

StartNew(Func<Object,TResult>, Object)

Crea e avvia un'attività.

StartNew(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

Crea e avvia un'attività.

StartNew(Func<TResult>, CancellationToken)

Crea e avvia un'attività.

StartNew(Func<TResult>, TaskCreationOptions)

Crea e avvia un'attività.

StartNew(Func<TResult>)

Crea e avvia un'attività.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Thread safety

Tutti i membri pubblici e protetti di TaskFactory<TResult> sono thread-safe e possono essere usati simultaneamente da più thread.

Vedi anche