Здравствуйте, AndrewVK, Вы писали:
AVK>Там есть Task.WhenAll, красивости ничего принципиально не меняют.
Одно из исходных требований: "Управляющий поток должен дожидаться пока все вычислительные потоки не встанут на паузу и только после этого раздавать им задачи". Поэтому в данном примере нельзя использовать Task.WhenAll, а нужна именно блокировка Task.WaitAll управляющего потока.