TaskFactory Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt ondersteuning voor het maken en plannen van Task objecten.
public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
- Overname
-
TaskFactory
Voorbeelden
In het volgende voorbeeld wordt de statische Factory eigenschap gebruikt om twee aanroepen naar de TaskFactory.StartNew methode uit te voeren. De eerste vult een matrix met de namen van bestanden in de map MyDocuments van de gebruiker, terwijl de tweede een matrix vult met de namen van submappen van de map MyDocuments van de gebruiker. Vervolgens wordt de TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) methode aangeroepen, die informatie weergeeft over het aantal bestanden en mappen in de twee matrices nadat de eerste twee taken de uitvoering hebben voltooid.
using System;
using System.IO;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task[] tasks = new Task[2];
String[] files = null;
String[] dirs = null;
String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
tasks[0] = Task.Factory.StartNew( () => files = Directory.GetFiles(docsDirectory));
tasks[1] = Task.Factory.StartNew( () => dirs = Directory.GetDirectories(docsDirectory));
Task.Factory.ContinueWhenAll(tasks, completedTasks => {
Console.WriteLine("{0} contains: ", docsDirectory);
Console.WriteLine(" {0} subdirectories", dirs.Length);
Console.WriteLine(" {0} files", files.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
Dim files() As String = Nothing
Dim dirs() As String = Nothing
Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
tasks(0) = Task.Factory.StartNew( Sub()
files = Directory.GetFiles(docsDirectory)
End Sub )
tasks(1) = Task.Factory.StartNew( Sub()
dirs = Directory.GetDirectories(docsDirectory)
End Sub )
Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
Console.WriteLine("{0} contains: ", docsDirectory)
Console.WriteLine(" {0} subdirectories", dirs.Length)
Console.WriteLine(" {0} files", files.Length)
End Sub)
End Sub
End Module
' The example displays output like the following:
' C:\Users\<username>\Documents contains:
' 24 subdirectories
' 16 files
Opmerkingen
.NET biedt twee factory's voor het maken en plannen van taken:
De TaskFactory klasse, die objecten maakt en Task<TResult> objecten maaktTask. U kunt de overbelastingen van deze methode aanroepen om een taak te maken en uit te voeren waarvoor niet-standaardargumenten zijn vereist.
Warning
Vanaf .NET Framework 4.5 biedt de methode Task.Run de eenvoudigste manier om een taak te maken met standaardconfiguratiewaarden en deze onmiddellijk te starten.
De TaskFactory<TResult> klasse, waarmee objecten worden gemaakt Task<TResult> .
Met de TaskFactory klasse kunt u het volgende doen:
Maak een taak en start deze onmiddellijk door de StartNew methode aan te roepen.
Warning
Vanaf .NET Framework 4.5 biedt de methode Task.Run de eenvoudigste manier om een taak te maken met standaardconfiguratiewaarden en deze onmiddellijk te starten.
Maak een taak die begint wanneer een van de taken in een matrix is voltooid door de methode aan te ContinueWhenAny roepen.
Maak een taak die begint wanneer alle taken in een matrix zijn voltooid door de methode aan te ContinueWhenAll roepen.
De statische Task<TResult>.Factory eigenschap retourneert een standaardobject TaskFactory<TResult> . U kunt ook een van de TaskFactory klasseconstructors aanroepen om de Task objecten te configureren die door de TaskFactory klasse worden gemaakt. In het volgende voorbeeld wordt een nieuw TaskFactory object geconfigureerd voor het maken van taken met een opgegeven annuleringstoken, opties voor het maken van taken, vervolgopties en een aangepaste taakplanner.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
class Example
{
static CancellationTokenSource cts = new CancellationTokenSource();
static TaskFactory factory = new TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
new CustomScheduler());
static void Main()
{
var t2 = factory.StartNew(() => DoWork());
cts.Dispose();
}
static void DoWork() {/*...*/ }
}
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(cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
New CustomScheduler())
Dim t2 = factory.StartNew(Sub() DoWork())
cts.Dispose()
End Sub
Sub DoWork()
' ...
End Sub
End Module
In de meeste gevallen hoeft u geen instantie van een nieuw TaskFactory exemplaar te maken. In plaats daarvan kunt u de Task.Factory eigenschap gebruiken, die een fabrieksobject retourneert dat gebruikmaakt van standaardwaarden. Vervolgens kunt u de methoden aanroepen om nieuwe taken te starten of taakvervolgingen te definiƫren. Zie het voorbeeld voor een afbeelding.
Constructors
| Name | Description |
|---|---|
| TaskFactory() |
Initialiseert een TaskFactory exemplaar met de standaardconfiguratie. |
| TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler) |
Initialiseert een TaskFactory exemplaar met de opgegeven configuratie. |
| TaskFactory(CancellationToken) |
Initialiseert een TaskFactory exemplaar met de opgegeven configuratie. |
| TaskFactory(TaskCreationOptions, TaskContinuationOptions) |
Initialiseert een TaskFactory exemplaar met de opgegeven configuratie. |
| TaskFactory(TaskScheduler) |
Initialiseert een TaskFactory exemplaar met de opgegeven configuratie. |
Eigenschappen
| Name | Description |
|---|---|
| CancellationToken |
Hiermee wordt het standaardannuleringstoken voor deze taakfactory opgehaald. |
| ContinuationOptions |
Hiermee haalt u de standaardopties voor taakvervolging voor deze taakfactory op. |
| CreationOptions |
Hiermee haalt u de standaardopties voor het maken van taken voor deze taakfactory op. |
| Scheduler |
Hiermee haalt u de standaardtaakplanner voor deze taakfactory op. |
Methoden
| Name | Description |
|---|---|
| ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll(Task[], Action<Task[]>, CancellationToken) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll(Task[], Action<Task[]>) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>) |
Hiermee maakt u een vervolgtaak die begint wanneer een set opgegeven taken is voltooid. |
| ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny(Task[], Action<Task>, CancellationToken) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny(Task[], Action<Task>) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>) |
Hiermee maakt u een vervolg Task die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| ContinueWhenAny<TResult>(Task[], Func<Task,TResult>) |
Hiermee maakt u een vervolg Task<TResult> die wordt gestart na het voltooien van een taak in de opgegeven set. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler) |
Hiermee maakt u een Task actie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions) |
Hiermee maakt u een Task actie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| FromAsync(IAsyncResult, Action<IAsyncResult>) |
Hiermee maakt u een Task actie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object, TaskCreationOptions) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object, TaskCreationOptions) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object) |
Hiermee maakt u een Task methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object) |
Hiermee maakt u een Task<TResult> methode die een paar begin- en eindmethoden vertegenwoordigt die voldoen aan het Asynchrone programmeermodelpatroon. |
| FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler) |
Hiermee maakt u een Task<TResult> functie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions) |
Hiermee maakt u een Task<TResult> functie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>) |
Hiermee maakt u een Task<TResult> functie voor een eindmethode wanneer een opgegeven IAsyncResult bewerking is voltooid. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler) |
Hiermee maakt en start u een taak voor de opgegeven actie gedelegeerde, annuleringstoken, opties voor maken en status. |
| StartNew(Action, CancellationToken) |
Hiermee maakt en start u een taak voor de opgegeven actie gedelegeerde en annuleringstoken. |
| StartNew(Action, TaskCreationOptions) |
Hiermee maakt u een taak voor de opgegeven actiedelegatie en maakopties. |
| StartNew(Action) |
Hiermee maakt en start u een taak voor de opgegeven actiedelegen. |
| StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) |
Hiermee maakt en start u een taak voor de opgegeven actie gedelegeerde, status, annuleringstoken, opties voor het maken en de taakplanner. |
| StartNew(Action<Object>, Object, CancellationToken) |
Hiermee maakt en start u een taak voor de opgegeven actie gedelegeerde, status en annuleringstoken. |
| StartNew(Action<Object>, Object, TaskCreationOptions) |
Hiermee maakt en start u een taak voor de opgegeven actie gedelegeerde, status- en aanmaakopties. |
| StartNew(Action<Object>, Object) |
Hiermee maakt en start u een taak voor de opgegeven actiedelegen en -status. |
| StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<Object,TResult>, Object) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<TResult>, CancellationToken) |
Hiermee maakt en start u een taak van het type |
| StartNew<TResult>(Func<TResult>, TaskCreationOptions) |
Hiermee maakt u een taak van het type |
| StartNew<TResult>(Func<TResult>) |
Hiermee maakt u een taak van het type |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
Van toepassing op
Veiligheid thread
Alle openbare en beveiligde leden van TaskFactory zijn thread-veilig en kunnen gelijktijdig worden gebruikt vanuit meerdere threads.