Я работаю с новой библиотекой 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 задач, которые, работающих одновременно. Каждая задача извлекает некоторые элементы из ожидающей очереди, выполняет некоторую операцию и затем пытается запустить вложенную задачу для результатов этой операции. Проблема в том, что если слишком много элементов (в то время как (true) имитирует это), и все 5 задач постоянно выполняются, вложенные задачи не запускаются. Пуск может быть запущен только после выполнения большинства задач с завершением цикла while.
кажется что-то с в то время как заявления, которое блокирует вложенные задачи для запуска, но я не знаю, что :)
Да. Они начинаются позже, но я хочу, чтобы они начинались параллельно с выполнением задач. Если я изменю ограничение для индекса «i» в цикле, например, 10, у меня будет создано и работает 10 потоков. Но ни одна вложенная задача не будет выполняться параллельно этим задачам. – lostaman
Добавление TaskCreationOptions.LongRunning для родительских задач решило проблему. – lostaman
Решает проблему в приведенном ниже примере, но не в моем проекте :( – lostaman