Я работаю с новой библиотекой TPL .NET и столкнулся с каким-то странным для меня поведением, которое я не могу объяснить. В моем случае почему-то не запускается вложенная задача. Я упростил решение до следующего:
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, которые блокируют выполнение вложенных задач, но я не знаю что :)