任务LongRunning副作用?

Jon*_*Jon 22 .net c# multithreading .net-4.0 task-parallel-library

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

Ste*_*ham 26

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

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

  • Reflectoring表明始终遵守.NET 4.0中的提示. (7认同)

Ali*_*tad 16

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

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


Hol*_*ger 5

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

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

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

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