Condividi tramite


TaskFactory<TResult> Classe

Definizione

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

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 oggetti Task<TResult> creati dai metodi di questa classe.

Ereditarietà
TaskFactory<TResult>

Esempio

Nell'esempio seguente viene usata la proprietà statica Factory per eseguire 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 delle 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 fornisce il modo più semplice per creare un'attività con valori di configurazione predefiniti e avviarla immediatamente.

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

  • Creare un'attività che inizia 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 costruttori di TaskFactory<TResult> classe 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 specificato, opzioni di creazione attività, opzioni di continuazione e utilità di pianificazione attività 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 usare la proprietà statica Task<TResult>.Factory , che restituisce un oggetto factory che usa valori predefiniti. È quindi possibile chiamare i metodi per avviare nuove attività o definire le continuazioni delle attività. Per un'illustrazione, vedere l'esempio.

Costruttori

TaskFactory<TResult>()

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

TaskFactory<TResult>(CancellationToken)

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

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

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

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory<TResult>(TaskScheduler)

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

Proprietà

CancellationToken

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

ContinuationOptions

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

CreationOptions

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

Scheduler

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

Metodi

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

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>, CancellationToken, TaskContinuationOptions, TaskScheduler)

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<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],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)

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>, TaskContinuationOptions)

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

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

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

Crea un'attività di continuazione che verrà avviata al completamento di una delle attività nel set fornito.

Equals(Object)

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

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

Crea un'attività che rappresenta una coppia di metodi Begin ed End conformi al modello di programmazione asincrona.

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

Crea un'attività che rappresenta una coppia di metodi Begin ed End conformi al modello di programmazione asincrona.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

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

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

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

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

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

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 ed End conformi al modello di programmazione asincrona.

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 ed End conformi al 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 ed End conformi al 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 ed End conformi al 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 ed End conformi al 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 ed End conformi al modello di programmazione asincrona.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
StartNew(Func<Object,TResult>, Object)

Crea e avvia un'attività.

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

Crea e avvia un'attività.

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

Crea e avvia un'attività.

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

Crea e avvia un'attività.

StartNew(Func<TResult>)

Crea e avvia un'attività.

StartNew(Func<TResult>, CancellationToken)

Crea e avvia un'attività.

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

Crea e avvia un'attività.

StartNew(Func<TResult>, TaskCreationOptions)

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