а потом встречается с незавершённой задачей. И возвращает её, разблокируя thread. Если у нас UI, то он не виснет, может реагировать на ещё что-нибудь, а тот метод когда-нибудь завершится. Кто бы ещё сказал, как, если он уже returned.
Это ладно, хоть как-то понятно.
А если нет UI, то какой вообще смысл в Context и прочем, если продолжиться оно может только получив результат с Awaitable и использовав его в дальнейшем.
Что тут вообще асинхронно и так ли уж плохо
Task.Run(async () => await AsyncMethod()).Result;
?
async/await это просто синтаксический сахар над таксом, когда, как ты пишешь, тред разблокируется, захватывается текущий SynchonizationContext и после выполнения задачи, остаток метода передастся в SynchronizatonContext.Send/Post
смысл в потоке выполнения, твой таск может находиться в выполняемом состоянии неограниченное время без блокировки потока и требовать дополнительного потока на ожидание
например, ты отправляешь сообщение о начале процесса и потом кто то присылает оповещение о его завершении. в синхронной реализации ты должен отправить запрос и блокировать поток до тех пор, пока не придёт ответ. С Asyn await в этом нет необходимости, ты отправляешь запрос и создаёшь TaskCompletitionSource, и потом, когда придёт ответ ты сможешь продолжить выполнение своего кода в каком нибудь потоке из ThreadPool. То есть в момент ожидания ты не блокируешь никаких потоков
вот про это
Обсуждают сегодня