Как устроен механизм yield внутри?

Компилятор превращает метод с yield в машину состояний: объект хранит текущее состояние, локальные данные и Current, а MoveNext продолжает выполнение до следующего yield или окончания.

Короткий ответ

Что ответить на собеседовании

Компилятор превращает метод с yield в машину состояний: объект хранит текущее состояние, локальные данные и Current, а MoveNext продолжает выполнение до следующего yield или окончания.

Подробный разбор

Ответ с пояснениями

Компилятор превращает метод с yield в машину состояний: объект хранит текущее состояние, локальные данные и Current, а MoveNext продолжает выполнение до следующего yield или окончания.

Первое перечисление запускает тело, yield return устанавливает очередной элемент и отдаёт управление потребителю. Следующий MoveNext продолжает с сохранённого места; yield break заканчивает последовательность.

Блоки finally выполняются при предусмотренном завершении и освобождении перечислителя, поэтому его нельзя бездумно бросать, если он владеет ресурсами. Никакой отдельный поток для обычного yield не создаётся. Повторный обход IEnumerable обычно выполняет логику снова, а не возвращает автоматически закешированные результаты.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее