Разве это технически неверно?
Нет, потому что это очень специфично.Это не значит, что написание async
метода, который ожидает задачу, всегда - это то же самое, что просто синхронное ожидание этой задачи, это только , что очень конкретно относится к случаю async
Main
метод в качестве точки входа для приложения.Когда вы создаете метод Main
async
, он просто синхронно ожидает возвращаемое задание, делая его функционально эквивалентным просто синхронному ожиданию задачи внутри метода вместо того, чтобы метод async
только в этомточная ситуация .
(Вы также можете привести аргумент, что он просто пытается сказать, что StartNew
с предоставленными параметрами и Run
эквивалентны и не собираются ссылаться на разницумежду асинхронным методом и синхронным ожиданием.)
почему ASP.Net все равно допускает синхронное ожидание для них?
Task
не было создано исключительно длябыть представлением работы, выполненной асинхронно.Он был разработан для этого , а также для синхронной параллельной работы с использованием нескольких потоков.Когда вы используете задачи для асинхронности, вы в принципе никогда не должны использовать Wait
или другой механизм синхронной блокировки, но если вы используете его для синхронной многопоточной работы, это полезно.Вы могли бы привести [хороший] аргумент, что им следовало разделить эти понятия, но они этого не сделали, и уже слишком поздно менять это.
Разве это не нарушает ихОсновная утилита?
Да, да, это так.Вот почему я не фанат этой реализации, и предпочел бы, чтобы они реализовали ее по-другому.Но они этого не сделали.
В статье должны быть четко объяснены различия между двумя вызовами.
Да, так и должно быть.