【发布时间】:2013-02-28 19:23:45
【问题描述】:
我希望能够在不启动任务的情况下创建任务,类似于运行 var a = new Task(); a.Start(); 但使用自定义工厂。工厂提供StartNew(),但我找不到将这两个动作分开的方法。这可能吗?
【问题讨论】:
我希望能够在不启动任务的情况下创建任务,类似于运行 var a = new Task(); a.Start(); 但使用自定义工厂。工厂提供StartNew(),但我找不到将这两个动作分开的方法。这可能吗?
【问题讨论】:
TaskFactory 基本上是两组默认选项(创建和继续)、一个默认取消令牌和一个任务调度程序。
您可以在刚刚新建任务时指定取消令牌和创建选项 - 然后在您想要的任何调度程序上启动它。所以:
Task task = new Task(action,
factory.CancellationToken,
factory.CreationOptions);
...
task.Start(factory.Scheduler);
应该做除了延续选项之外的工作。延续选项仅在您添加延续时才相关,您可以直接指定。有什么不在此范围内的吗?
(需要注意的一点是,基于任务的异步模式通常围绕“热”任务展开,无论如何,这些任务在您看到它们时就已启动。因此,您可能希望避免过于广泛地暴露未启动的任务。)
【讨论】: