Factory delle attività
Una factory delle attività è rappresentata dalla classe System.Threading.Tasks.TaskFactory che crea oggetti Task o dalla classe System.Threading.Tasks.TaskFactory<TResult> che crea oggetti Task<TResult>. Entrambe classi contengono metodi che è possibile utilizzare per:
Creare attività e avviarle immediatamente. Per ulteriori informazioni, vedere Parallelismo fra attività (Task Parallel Library).
Creare continuazioni di attività che iniziano quando una qualsiasi o tutte le matrici delle attività vengono completate. Per ulteriori informazioni, vedere Attività di continuazione.
Creare attività che rappresentano coppie di metodi di inizio/fine che seguono il modello di programmazione asincrono. Per ulteriori informazioni, vedere Task Parallel Library e programmazione asincrona .NET tradizionale.
La classe Task presenta una proprietà statica che rappresenta l'oggetto TaskFactory predefinito. In genere, i metodi TaskFactory vengono richiamati tramite la proprietà Factory, come mostrato nell'esempio seguente.
[Visual Basic]
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
Nella maggior parte degli scenari non è necessario derivare una nuova classe da TaskFactory. Qualche volta risulta tuttavia utile configurare un nuovo oggetto TaskFactory e utilizzarlo per specificare determinate opzioni o associare attività a un'utilità di pianificazione personalizzata. Nell'esempio seguente viene mostrato come configurare un nuovo oggetto TaskFactory che crea attività che utilizzano tutte l'oggetto TaskScheduler specificato e presentano le opzioni TaskCreationOptions specificate.
Class Program
Shared Sub Main()
Dim cts As CancellationTokenSource = New CancellationTokenSource()
Dim _factory As TaskFactory = New TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
New MyScheduler())
Dim t2 = _factory.StartNew(Sub() DoWork())
End Sub
Shared Sub DoWork()
' ...
End Sub
class Program
{
static CancellationTokenSource cts = new CancellationTokenSource();
private static TaskFactory _factory = new TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
new MyScheduler());
static void Main(string[] args)
{
var t2 = _factory.StartNew(() => DoWork());
}
static void DoWork() {/*...*/ }
}