我正在使用 .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 语句似乎有问题,但我不知道是什么:)