【问题标题】:Create but not start a task with a custom task factory?使用自定义任务工厂创建但不启动任务?
【发布时间】:2013-02-28 19:23:45
【问题描述】:

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

【问题讨论】:

    标签: c# task-parallel-library


    【解决方案1】:

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

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

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

    应该做除了延续选项之外的工作。延续选项仅在您添加延续时才相关,您可以直接指定。有什么不在此范围内的吗?

    (需要注意的一点是,基于任务的异步模式通常围绕“热”任务展开,无论如何,这些任务在您看到它们时就已启动。因此,您可能希望避免过于广泛地暴露未启动的任务。)

    【讨论】:

    • 这使得工厂的创建变得多余,因为我们在任务创建(和继续)时手动修改任务行为。我希望有一种我忽略的更优雅的方法,但如果没有,我想这也很好知道 =)
    • @Jake:好吧,您可能希望将工厂保留在那里,作为封装这些选项的一种方式 - 或者立即开始其他任务。我的观点是,它并没有真正做很多你不能手动做的事情。
    猜你喜欢
    • 2017-06-04
    • 2019-03-28
    • 2010-11-27
    • 2011-07-02
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多