Task.WhenAll () только ждет всех задач, пока не завершится их выполнение.Он упорядочит результаты так, чтобы они соответствовали порядку, в котором были переданы объекты задачи, но он не предписывает какой-либо порядок выполнения, хотя все задачи всегда внутренне запускаются в порядке их появления (см. исходный код ).Если вам нужен фиксированный порядок выполнения, вы должны позаботиться о нем сами, например, используя WaitHandle, такой как ManualRestEvent или Semaphore, или используя методы продолжения задачи.
Это означает, что все ваши задачи выполняются одинаково быстро (например,в вашем примере) чем они запускаются в том же порядке и завершаются в том же порядке.Но если ваши задачи выполняются в разное время, например, task1 -> 2000 мс и task2 -> 20 мс, тогда task2 завершится задолго до task1.
Или использовать ваш пример, когда задача 1 занимает больше времени, чем задача 2, чтобы достичь вызова sut.MyMethod () результат не будет таким же.Теперь, если вам нужно выполнить задачу 1 до выполнения задачи 2, вам нужно контролировать поток.