使用自定义任务工厂创建但不启动任务

本文关键字:任务 启动 创建 工厂 自定义 | 更新日期: 2023-09-27 18:01:33

我希望能够创建一个任务而不启动它,类似于运行var a = new Task(); a.Start();,但有一个自定义工厂。工厂提供StartNew(),但我找不到一种方法来分离这两个动作。这可能吗?

使用自定义任务工厂创建但不启动任务

一个TaskFactory基本上是两组默认选项(创建和延续),一个默认取消令牌,和一个任务调度程序。

你可以指定取消令牌和创建选项,当你只是新建一个任务-然后启动它在任何你想要的调度程序。所以:

Task task = new Task(action,
                     factory.CancellationToken,
                     factory.CreationOptions);
...
task.Start(factory.Scheduler);

应该执行该任务,而不是继续选项。无论如何,延续选项仅在添加延续时才相关,您可以直接指定延续。还有什么不包括在内的吗?

需要注意的一点是,基于任务的异步模式通常围绕"热门"任务展开,这些任务在你看到它们的时候就已经开始了。因此,您可能希望避免过多地暴露未启动的任务。