【发布时间】:2015-07-09 04:33:18
【问题描述】:
for (int i = 0; i < someNumber; i++)
{
Task<myObject>.Run(() =>
{
// some work
// ...
Task<myObjectNew>.Run(() => { // other work });
});
}
我有一个循环,它创建了许多初始任务(最多 100 个)。然后这些任务中的每一个都做一些小的工作单元,然后自己创建另一个任务。我注意到的是,最初的 100 个任务在全部设置完成之前都不会启动。
如果初始任务创建了一个线程而不是另一个任务,那么一切似乎都很好,一旦创建了第一个外部任务,它就会开始执行(并产生一个新线程等)。
我没有看到像以前那样的行为,但我又没有让一个任务创建另一个任务。
有什么想法吗?
【问题讨论】:
-
如果您只是调用 Task.Run 并想立即开始,使用 TPL 似乎只会增加不必要的开销和混乱;您是否考虑过保持简单并只需致电
new Thread(...).Start()? -
@DaxFohl 你能解释一下它是如何引入开销的吗?
-
也许试图解释你的最终目标是什么。有很多抽象(例如
TPL Dataflow)可以帮助您进行线程调度,而不是自行推出。 -
@Science_Fiction,您可能想尝试调整
ThreadPool:ThreadPool.SetMaxThreads(200, 200); ThreadPool.SetMinThreads(100, 100);尽管正如其他人所说,可能有比您使用的更好的方法。 -
@yuri task 是线程之上的一个层,那怎么不呢?
标签: c# .net multithreading task-parallel-library