Я читал о новом ключевом слове async await
, и это звучит потрясающе, но есть один ключевой вопрос, который мне не удалось найти в любом из интро-видео, которое я просмотрел до сих пор (Я также прочитал документ некоторое время назад).
Предположим, что у меня есть вызов await
во вложенной функции основного потока пользовательского интерфейса. Что происходит с нитью в этот момент? Возвращает ли управление в контур сообщения, и поток пользовательского интерфейса может обрабатывать другие входы?
Когда ожидаемая задача завершается, весь стек попадает в очередь сообщений, так что элемент управления будет возвращаться через каждую из этих вложенных функций или что-то еще происходит здесь?
И во-вторых (пока я обращаю ваше внимание), я действительно не понимаю, почему асинхронные методы должны быть помечены async
. Не может ли какой-либо метод выполняться асинхронно? Что делать, если я хочу выполнить метод асинхронно, но у него нет ключевого слова async - есть ли способ сделать это просто?
Приветствия.:)
Edit: По общему признанию, если бы я мог получить компиляцию кода образца, я мог бы, вероятно, просто понять это сам, но по той или иной причине я столкнулся с этим блоком. То, что я действительно хочу знать, в какой степени продолжение продолжается... Замораживает весь стек вызовов, возобновляет его, когда задача завершается, или она только возвращается? Должна ли сама функция быть помечена как асинхронная, чтобы поддерживать продолжение, или (как я спросил первоначально) продолжает ли она весь стек вызовов?
Если он не затормозит весь стек вызовов, что произойдет, когда асинхронное ожидание ударит по неасинхронной функции вызова? Блокирует ли это? Разве это не победит точку ожидания? Надеюсь, вы увидите, что мне не хватает понимания здесь, и я надеюсь, что кто-то сможет заполнить его, чтобы я мог продолжить изучение этого.