Comments 15
Yield хорош для организации конвеера данных. Загрузить с сайта небольшой батч данных в память, отдать через yield, обработать, сохранить, moveNext().
Выбрасывание исключения Reset-ом — задокументированное поведение, всё с ним норм.
docs.microsoft.com/ru-ru/dotnet/api/system.collections.ienumerator.reset?view=net-5.0#remarks
docs.microsoft.com/ru-ru/dotnet/api/system.collections.ienumerator.reset?view=net-5.0#remarks
Реализует 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
UFO just landed and posted this here
Начиная с C# 8, метод с yield
может возвращать ещё и System.Collections.Generic.IAsyncEnumerable<T>
, что позволит ему быть асинхронным. Разумеется, внутренняя реализация будет отличаться, но общие принципы те же — сгенерированный класс с полями для параметров метода и локальных переменных, и switch
по полю state
в методе MoveNext
.
Спасибо, классная статья. Работаю в Unity, использую
yield
в корутинах, в основном при загрузке ресурсов и других данных с помощью UnityWebRequest
, часть API Google тоже предполагает использование yield (например, In-App Review).Спасибо, статья понравилась. Хотелось бы по больше примеров использования. Столкнулся с yield в видео по Unity с локализацией текстов.
Sign up to leave a comment.
Что такое yield и как он работает в C#?