【问题标题】:Regarding usage of TaskScheduler.FromCurrentSynchronizationContext & Task.Factory.StartNew()关于 TaskScheduler.FromCurrentSynchronizationContext & Task.Factory.StartNew() 的使用
【发布时间】:2013-11-16 04:07:48
【问题描述】:

我是 MS TPL 的新手。所以我看到有些时候人们在使用Task.Factory.StartNew() 启动任何任务时使用TaskScheduler.FromCurrentSynchronizationContext,而有些时候人们在启动任务时不使用TaskScheduler

var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            Task.Factory.StartNew(() =>
            {
            });

Task.Factory.StartNew(() =>
            {
            });

所以请有人告诉我TaskScheduler 的用途是什么?什么时候TaskScheduler应该和Task.Factory.StartNew一起使用,什么时候不应该使用TaskScheduler

请用小示例代码解释,以便更好地理解TaskScheduler的用法。

另一个问题我们如何在创建任务时安排这样的任务我如何指定任务需要开始的时间或日期或日期。谢谢

【问题讨论】:

    标签: c# winforms task-parallel-library


    【解决方案1】:

    如果您希望给定的任务在 UI 线程上运行,则使用uiScheduler 作为给定的TaskScheduler。如果您希望任务在线程池线程中运行,这是默认行为,请不要提供任何TaskScheduler,或提供TaskScheduler.Default

    【讨论】:

    • 感谢您的回复,但我想知道在 UI 线程上运行任何任务的优势是什么?可以给我两个示例代码,一个用于 UI 线程,另一个用于使用任务并行库的线程池。谢谢
    • @Mou 如果您有需要操作用户界面的代码,您可以在 UI 线程上运行它,这样它就可以真正工作。如果您不需要操作 UI,并且希望在您执行其他操作时允许 UI 自行操作,则不要在 UI 线程上运行它。至于示例,实际上是将变量添加到参数列表而不是省略它的问题。我对您自己弄清楚如何在方法调用中添加或省略参数的能力充满信心。如果您仍然需要示例,MSDN 文档会为每个重载提供它们。
    • 我在某些地方读到 uiScheduler 会使进程变慢...这是真的吗,因为我经常看到人们在开始任何任务时不使用 uiScheduler。
    • @Mou 性能在这里无关紧要。如果你有工作需要在 UI 线程上,它需要在 UI 线程上,就是这样。如果它不应该在 UI 线程上,那么它不应该在 UI 线程上。
    • @Mou Using BeginInvoke 是该语言早期版本中用于从另一个线程访问 UI 线程的工具。除非有特殊情况,否则您通常不应该在最新版本中使用它。
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多