Я считаю, что путаница заключается в том, что Task.WaitAll является синхронной версией (лучшего) метода Task.WhenAll. Вот SO сообщение , охватывающее различия между ними.
Все комментарии в посте, на который ссылаются, пытались сказать, что синхронное ожидание многих задач приводит к таким же тупикам, как ожидание для одной задачи.