Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Для чего нужны Async/await?
async/await — это синтаксис, который упрощает работу с промисами, делая асинхронный код более похожим на синхронный. Функция с ключевым словом async всегда возвращает промис, а await приостанавливает выполнение функции до получения результата промиса. Это делает код более читаемым и упрощает обработку ошибок.
Как работает асинхронная итерация в ES6+ с использованием for-await-of?
Асинхронная итерация с использованием for-await-of позволяет работать с асинхронными итераторами, такими как асинхронные генераторы или промисы, которые возвращают данные постепенно. Оператор for-await-of ждет разрешения каждого промиса перед переходом к следующей итерации. Это удобно для обработки потоков данных или последовательных асинхронных операций.
В чём разница между многопоточностью (CPU-bound) и асинхронностью (IO-bound) в .NET и как работают async/await?
CPU-bound задачи используют потоки и Parallel/Tasks для распределения вычислений между ядрами и могут потребовать lock/SemaphoreSlim. IO-bound операции (await httpClient.GetAsync) не блокируют поток — метод возвращает Task, освобождая поток для других задач, а по завершении I/O продолжает выполнение в пуле. async/await трансформирует метод в state machine, которая при встрече await регистрирует продолжение и возвращает Task без блокировки текущего потока.
В чём разница между async/await и GCD?
GCD (Grand Central Dispatch) предоставляет низкоуровневые очереди и синхронизированные вызовы sync/async, требуя явного управления задачами и колбэками. async/await — новый синтаксис на основе Swift Concurrency с Task и Actor, упрощает чтение асинхронного кода, позволяет писать его как последовательный, автоматически управляет жизненным циклом задач.
Может ли метод с async выполняться синхронно? Что происходит с потоком при await?
Да, метод с async может выполняться синхронно, если результат уже доступен. При await поток освобождается, пока задача не завершится. Это позволяет использовать его для других операций, а не блокировать. После завершения задачи выполнение продолжается (возможно, в другом потоке).
Почему запрещено использовать await внутри lock? Как lock реализован под капотом?
Как поток возвращается в пул потоков при выполнении await?
Почему async/await вместо Promises?
Какая связь между async/await и генераторами?
Что произойдёт, если перед корутиной не использовать await?
Рейтинг:
2
Сложность:
4
await внутри lock может вызвать взаимоблокировку или нарушить поток выполнения. После await поток меняется, и блокировка не освобождается автоматически. lock компилируется в Monitor.Enter/Exit с try/finally, чтобы гарантировать освобождение блокировки даже при исключениях.
Рейтинг:
2
Сложность:
4
При await на незавершённой задаче:
Текущий поток возвращается в пул потоков.
Когда задача завершается, продолжение (continuation) ставится в очередь.
Пул потоков назначает любой свободный поток для выполнения продолжения.
Рейтинг:
2
Сложность:
6
async/await делает асинхронный код:
Читаемым (похож на синхронный).
Удобным для отладки (стек вызовов не «разрывается»).
Лёгким в обработке ошибок (через try/catch).
Рейтинг:
2
Сложность:
6
Ключевая связь в том, что и генераторы, и асинхронные функции позволяют приостанавливать выполнение кода и later возобновлять его. Генераторы используют ключевое слово yield для паузы и возврата значения. Механизм async/await был во многом вдохновлен этой идеей: await приостанавливает выполнение асинхронной функции, подобно тому как yield приостанавливает генератор. Изначально асинхронность в Python (библиотека asyncio) использовала генераторы для реализации корутин.
Рейтинг:
2
Сложность:
7
Если не использовать await перед корутиной, она не будет выполнена. Вместо выполнения вы получите объект корутины, который нужно передать в event loop для запуска. Это может привести к невыполнению кода и предупреждениям.
Рейтинг:
4
Сложность:
4
Рейтинг:
1
Сложность:
8
Рейтинг:
2
Сложность:
5
Рейтинг:
2
Сложность:
6
Рейтинг:
2
Сложность:
6