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

时间:2013-02-28 19:23:45

标签: c# task-parallel-library

我希望能够在不启动任务的情况下创建任务,类似于运行var a = new Task(); a.Start();但使用自定义工厂。工厂提供StartNew(),但我找不到将这两种行为分开的方法。这可能吗?

1 个答案:

答案 0 :(得分:15)

TaskFactory基本上是两组默认选项(创建和继续),默认取消令牌和任务计划程序。

您可以在刚刚创建任务时指定取消令牌和创建选项 - 然后在您想要的任何计划程序上启动它。所以:

Task task = new Task(action,
                     factory.CancellationToken,
                     factory.CreationOptions);
...
task.Start(factory.Scheduler);
除了延续选项之外,

应该完成这项工作。继续选项仅在您添加延续时才相关,您可以直接指定。有没有未涵盖的内容?

(有一点需要注意的是,基于任务的异步模式通常围绕“热”任务展开,这些任务是在你看到它们的时候开始的。所以你可能想避免过多地暴露未启动的任务。)