await
не совпадает с Wait()
; выполнение await
является значительным переписыванием этого метода и, в частности, влияет на ожидание того, как этот метод завершится для вызывающей стороны. Вы правы в том, что на самом деле он не делает много (предостережение: возвращаемые типы), кроме как сказать компилятору включить некоторые вещи (как это делают переключатели, такие как unsafe
, checked
и unchecked
, если вы подумайте об этом) - но подумайте: это действительно имеет значение чрезвычайно в вашем примере. Если Main()
выходит (и мы не предполагаем других потоков) - вы exe is toast . Ушел. Более не существует. Добавление async
заставляет вас считать, что только метод завершает работу , не означает, что он закончен . Вы действительно не хотите, чтобы Main()
выходил до того, как вы будете готовы.
В качестве вторичного эффекта этот переключатель также формализует, что метод может возвращать только такие вещи, как Task
; без переключателя у вас может возникнуть желание сделать его асинхронным позже, что может стать серьезным изменением.