За что отвечает ключевое слово async?

Я — «Папочка Разработки»: пишу о карьере .NET/C#, собесах и том, как продавать свои навыки дороже. Без воды: разборы утечек памяти, практические гайды по интервью, резюме с цифрами и честные кейсы с рынка. Плюс немного про ИИ — как делегировать ему рутину и ускорять работу. Заходи, если нужен понятный план действий, а не мотивационные лозунги.

asyncстейт-машинаасинхронность

У каждого спрашивали на собеседовании про модификатор async, большинство слышали про стейт-машину и на вопрос «а зачем же оно всё надо» ответят примерно следующим образом:

Ну… Это значит, что метод развернётся в стейт-машину, там свитч ещё будет, ну и метод вообще асинхронный, а это значит, ждать не будем.

Чего? Я понимаю, что у нас всё всегда упаковывается в паттерны, а для всего уже придумали модные термины, но тут всё намного проще.

Запоминайте раз и навсегда, чтобы не умные термины учить, а понять 🌟.

В обычный метод поток заходит, делает какие-то дела и выходит — всё, после этого следов выполнения не осталось, а они и не нужны, ведь задача уже готова.

В асинхронный метод потоку НАДО УМЕТЬ зайти, прервать (уметь — не значит прервать, это уже от await зависит) выполнение в какой-то момент, выйти, а потом вернуться в то же место.

Зачем?

Например: мы в середине метода хотим сделать запрос к БД, который вернёт нам кучу строк и будет выполняться пару секунд.

Конечно, можно повисеть в середине метода и подождать, пока БД вернёт ответ, но это потоку надо прям висеть и ждать, а он не на помойке себя нашёл и может потратить это время более продуктивно.

А эта БД пусть сама скажет, когда закончит. Тогда какой-нибудь поток и отправим продолжать выполнение метода.

За счёт этого во время асинхронной операции ввода-вывода (это как раз наш запрос к БД) не занят ни один поток приложения.

Всё. Вот для этого механизма и нужны стейт-машины, свитчи и мув некcты, которые под капотом это всё делают. Если нет понимания идеи, то знания про стейт машину бесполезны

Дискуссия

Dzmitry Salodki
машина состояний в новой версии дот нет больше не будет использоваться...
Aleksandr Alekseev
Dzmitry Salodki
машина состояний в новой версии дот нет больше не будет использоваться...
Да, тут только пост не про стейт машины
Maxim
Ключевое слово async говорит нам о том, что в методе может использоваться другое ключевое слово - await😁
Dmitriy Kripak
Если это web api, то потоку не нужно знать куда возвращаться 😎
Aleksandr Alekseev
Dmitriy Kripak
Если это web api, то потоку не нужно знать куда возвращаться 😎
Да, так и есть
Присоединиться к обсуждению →

Читайте так же