任务LongRunning副作用?

如果使用LongRunning选项创建任务,则会产生任何副作用,因为它们不使用ThreadPool

是的 副作用是: 如果你有一百万个任务,你可能会创建一百万个线程。

需要考虑到每个线程都会带来内存开销上下文切换开销。 内存开销不小,我们在这里谈几MB ,所以即使有数千项,你也可能遇到麻烦。

LongRunning选项是对调度程序的提示,这意味着它可以选择在非ThreadPool线程上执行Task (如果它是最有可能的线程池支持的DefaultScheduler )。 LongRunning选项的一个副作用是该任务不允许任务内联。 这意味着如果LongRunning任务创建其他嵌套或子任务并在任何这些任务上调用Wait ,它们将始终在不同的线程上执行而不是内联(即在执行Wait的同一线程上运行)。

在其他人的答案的背景下,值得注意的是,在没有 LongRunning提示的情况下创建大量需要很长时间才能完成的任务仍然可能导致由于LongRunning使用的线程注入算法导致的线程数的升级。 该算法不区分池中被阻塞的线程和长时间运行工作项的线程,并且在两种情况下都可以通过向池中注入更multithreading来尝试增加工作吞吐量来响应。

LongRunning任务表示将绕过全局和本地队列,以防止它阻塞本地队列中的其他线程。

这意味着,如果您有很多这些长时间运行的任务,它可能会创建比正常情况更多的线程。

你可以在这个问题的答案中看到一些缺点:

http://social.msdn.microsoft.com/Forums/en/parallelextensions/thread/8304b44f-0480-488c-93a4-ec419327183b