Wait () приведет к запуску потенциально асинхронного кода синхронно. ждать не буду.
Например, у вас есть веб-приложение asp.net. UserA вызывает / getUser / 1 конечную точку. Пул приложений asp.net выберет поток из пула потоков (Thread1), и этот поток выполнит HTTP-вызов. Если вы сделаете Wait (), этот поток будет заблокирован до разрешения http-вызова. Пока он ожидает, если UserB вызывает / getUser / 2, тогда пулу приложений потребуется обслуживать другой поток (Thread2) для повторного вызова http. Вы только что создали (ну, на самом деле, извлекли из пула приложений) другой поток без причины, потому что вы не можете использовать поток 1, он был заблокирован функцией Wait ().
Если вы используете await в Thread1, то SyncContext будет управлять синхронизацией между вызовами Thread1 и http. Просто он будет уведомлять, как только http-вызов завершен. Между тем, если UserB вызывает / getUser / 2, то вы снова будете использовать Thread1 для выполнения http-вызова, потому что он был освобожден после того, как ожидают попадания. Тогда другой запрос может использовать его, даже дальше. После завершения http-вызова (user1 или user2) Thread1 может получить результат и вернуться к вызывающей стороне (клиенту). Тема 1 использовалась для нескольких задач.
Task
которое занимает 10 мс, фактически выполняло бы 10-часовую работуTask
в вашем потоке, таким образом блокируя вас на все 10 часов?