我正在使用.NET新的TPL库,并面对一些我无法解释的奇怪行为。出于某种原因,嵌套任务不会在我的情况下启动。我简化了我的解决方案:任务并行库。嵌套任务无法启动
bool flag = false;
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() =>
{
while (true) // a lot of newcoming tasks
{
Thread.Sleep(200); //do some work
Task.Factory.StartNew(() =>
{
flag = true;
});
}
});
}
Thread.Sleep(2000);
Assert.IsTrue(flag);
我有5个同时运行的任务。每个任务从暂挂队列中检索一些元素,执行一些操作,然后尝试为此操作的结果运行嵌套任务。问题是,如果有太多的元素(while(true)模拟这个),并且所有5个任务都在不断运行嵌套任务不会启动。只能在while循环完成其大部分任务后才能启动。
这似乎有点问题,而语句块嵌套任务运行,但我不知道是什么:)
是的,他们稍后开始,但我希望他们开始并行执行任务。如果我将循环中“i”索引的限制更改为10,例如,我将创建并运行10个线程。但是没有一个嵌套任务将与这些任务并行运行。 – lostaman 2010-07-28 13:01:54
为父任务添加TaskCreationOptions.LongRunning解决了问题。 – lostaman 2010-07-28 13:23:58
它解决了下面的例子中的问题,但不是在我的项目:( – lostaman 2010-07-28 13:32:11