任务工厂

任务工厂由创建 Task 对象的 System.Threading.Tasks.TaskFactory 类表示,或由创建 Task<TResult> 对象的 System.Threading.Tasks.TaskFactory<TResult> 类表示。 这两个类都包含可用于执行以下操作的方法:

  • 创建任务并立即启动任务。 有关更多信息,请参见任务并行(任务并行库)

  • 创建在一组任务中的任意或全部任务完成后启动的任务延续项。 有关更多信息,请参见延续任务

  • 创建表示开始/结束方法对的任务,这些方法采用异步编程模型。 有关更多信息,请参见 TPL 和传统 .NET 异步编程

Task 类具有一个表示默认 TaskFactory 的静态属性。 通常使用 Factory 属性来调用 TaskFactory 方法,如下面的示例所示。

[Visual Basic]

Dim taskA as Task = Task.Factory.StartNew(Sub( ...))

[C#]

Task taskA = Task.Factory.StartNew( () => ...);

大多数情况下,您不必从 TaskFactory 中派生新类。 但是,配置新 TaskFactory 然后使用它来指定某些选项或将任务与自定义计划程序关联有时很有用。 下面的示例演示如何配置一个创建任务的新 TaskFactory,这些任务均使用指定的 TaskScheduler 并具有指定的 TaskCreationOptions 选项。

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

请参见

概念

.NET Framework 中的并行编程