TaskFactory<TResult> Osztály

Definíció

Támogatja az objektumok létrehozását és ütemezését Task<TResult> .

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

Típusparaméterek

TResult

Az osztály metódusai által létrehozott objektumok visszaadott értéke Task<TResult> .

Öröklődés
TaskFactory<TResult>

Példák

Az alábbi példa a statikus Factory tulajdonság használatával két hívást indít a TaskFactory<TResult>.StartNew metódusra. Az első feladat egy sztringtömböt ad vissza, amely a felhasználó MyDocuments könyvtárában lévő fájlok nevével van feltöltve, a második pedig egy sztringtömböt ad vissza, amely a felhasználó MyDocuments könyvtárának alkönyvtárainak nevével van feltöltve. Ezután meghívja a TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) metódust, amely információkat jelenít meg a két feladat által visszaadott fájlok és könyvtárak számáról a végrehajtás befejezése után.

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

Megjegyzések

.NET két gyárat biztosít a feladatok létrehozásához és ütemezéséhez:

Az TaskFactory<TResult> osztály a következőket teszi lehetővé:

  • Hozzon létre egy feladatot, és azonnal indítsa el a StartNew metódus meghívásával. A metódus túlterheléseit meghívva létrehozhat és végrehajthat egy olyan feladatot, amely nem alapértelmezett argumentumokat igényel.

    Warning

    A .NET Framework 4.5-től kezdve a Task.Run metódus a legegyszerűbb módot kínálja az alapértelmezett konfigurációs értékekkel rendelkező feladatok létrehozására és azonnali elindítására.

  • Hozzon létre egy feladatot, amely akkor indul el, amikor egy tömb bármelyik tevékenysége befejeződött a ContinueWhenAny metódus meghívásával ContinueWhenAny .

  • Hozzon létre egy tevékenységet, amely akkor indul el, amikor egy tömb összes tevékenysége befejeződött a ContinueWhenAll metódus meghívásával ContinueWhenAll .

A statikus Task<TResult>.Factory tulajdonság egy alapértelmezett TaskFactory<TResult> objektumot ad vissza. Az osztálykonstruktorok TaskFactory<TResult> egyikét Task<TResult> is meghívhatja az TaskFactory<TResult> osztály által létrehozott objektumok konfigurálásához. Az alábbi példa egy új TaskFactory<TResult> objektumot konfigurál a megadott lemondási jogkivonattal, tevékenységlétrehozási lehetőségekkel, folytatási lehetőségekkel és testreszabott feladatütemezővel rendelkező tevékenységek létrehozásához.

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

A legtöbb esetben nem kell új TaskFactory<TResult> példányt létrehoznia. Ehelyett használhatja a statikus Task<TResult>.Factory tulajdonságot, amely egy alapértelmezett értékeket használó gyári objektumot ad vissza. Ezután meghívhatja a metódusokat új tevékenységek indításához vagy a tevékenységek folytatásának definiálásához. Ábrát a példában talál.

Konstruktorok

Name Description
TaskFactory<TResult>()

Inicializál egy példányt TaskFactory<TResult> az alapértelmezett konfigurációval.

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

Inicializál egy példányt TaskFactory<TResult> a megadott konfigurációval.

TaskFactory<TResult>(CancellationToken)

Inicializál egy példányt TaskFactory<TResult> az alapértelmezett konfigurációval.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

Inicializál egy példányt TaskFactory<TResult> a megadott konfigurációval.

TaskFactory<TResult>(TaskScheduler)

Inicializál egy példányt TaskFactory<TResult> a megadott konfigurációval.

Tulajdonságok

Name Description
CancellationToken

Lekéri a feladat-előállító alapértelmezett lemondási jogkivonatát.

ContinuationOptions

Lekéri a TaskContinuationOptions feladat-előállító enumerálási értékét.

CreationOptions

Lekéri a TaskCreationOptions feladat-előállító enumerálási értékét.

Scheduler

Lekéri a feladat-előállító tevékenységütemezőjét.

Metódusok

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

Létrehoz egy folytatási feladatot, amely a megadott feladatok egy halmazának befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott feladatok egy halmazának befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott tevékenységek egy készletének befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

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

Létrehoz egy folytatási feladatot, amely a megadott készletben lévő tevékenységek befejezésekor indul el.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Létrehoz egy feladatot, amely egy adott befejezési IAsyncResult metódusfüggvényt hajt végre.

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

Létrehoz egy feladatot, amely egy adott befejezési IAsyncResult metódusfüggvényt hajt végre.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

Létrehoz egy feladatot, amely egy adott befejezési IAsyncResult metódusfüggvényt hajt végre.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

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

Olyan feladatot hoz létre, amely az aszinkron programozási modell mintájának megfelelő kezdő és záró metódusokat jelöli.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Létrehoz és elindít egy feladatot.

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

Létrehoz és elindít egy feladatot.

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

Létrehoz és elindít egy feladatot.

StartNew(Func<Object,TResult>, Object)

Létrehoz és elindít egy feladatot.

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

Létrehoz és elindít egy feladatot.

StartNew(Func<TResult>, CancellationToken)

Létrehoz és elindít egy feladatot.

StartNew(Func<TResult>, TaskCreationOptions)

Létrehoz és elindít egy feladatot.

StartNew(Func<TResult>)

Létrehoz és elindít egy feladatot.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Szálbiztonság

Az összes nyilvános és védett tagja TaskFactory<TResult> szálbiztos, és egyidejűleg több szálból is használható.

Lásd még