【发布时间】:2010-07-28 11:37:51
【问题描述】:
我正在使用 .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 循环的任务完成执行后才能启动。
阻止嵌套任务运行的while语句似乎有问题,但我不知道是什么:)
【问题讨论】:
标签: .net-4.0 task task-parallel-library