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