TaskFactory<TResult> Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 osztály, amely létrehoz Task és Task<TResult> objektumokat.
Az TaskFactory<TResult> objektumokat létrehozó Task<TResult> osztály.
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ó.