Как стать автором
Обновить

Комментарии 15

Yield хорош для организации конвеера данных. Загрузить с сайта небольшой батч данных в память, отдать через yield, обработать, сохранить, moveNext().
Отличный пример!
Вы правы, но в принципе в статье я не говорю о том, что с Reset что-то не так :) Просто обращаю на этот момент внимание.
Реализует IDisposable по той же причиние, почему и типизированный IEnumerator<T> наследует IDisposable. В том числе foreach пытается кастовать нетипизированный IEnumerable в IDisposable и гарантирует вызов Dispose() если удается скастовать.
Действительно, вы правы. Хотя мне всё-таки не совсем понятно, зачем же тогда в объявлении генератора записан IDisposable
Хотя возможно, что здесь дело в особенностях работы декомпилятора.
Поправил этот момент, большое спасибо!
То, что нетипизированный IEnumerator не наследует IDisposable, это похоже на легаси первой версии c# и оставлено для обратной совместимости. Это исправлено в типизированном IEnumerator<T>. Мнение Джона Скита: stackoverflow.com/questions/232558/why-does-ienumeratort-inherit-from-idisposable-while-the-non-generic-ienumerat
НЛО прилетело и опубликовало эту надпись здесь

Начиная с C# 8, метод с yield может возвращать ещё и System.Collections.Generic.IAsyncEnumerable<T>, что позволит ему быть асинхронным. Разумеется, внутренняя реализация будет отличаться, но общие принципы те же — сгенерированный класс с полями для параметров метода и локальных переменных, и switch по полю state в методе MoveNext.

Очень ценное замечание, спасибо!
Спасибо, классная статья. Работаю в Unity, использую yield в корутинах, в основном при загрузке ресурсов и других данных с помощью UnityWebRequest, часть API Google тоже предполагает использование yield (например, In-App Review).

Рад был помочь)

Спасибо, статья понравилась. Хотелось бы по больше примеров использования. Столкнулся с yield в видео по Unity с локализацией текстов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий