Condividi tramite


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:

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() {/*...*/ }
}

Vedere anche

Concetti

Programmazione parallela in .NET Framework