Как именно работают счетчики - я знаю, что они строят конечный автомат за кулисами, но если я дважды вызову GetEnumerator, получу ли я два разных объекта?
Если я что-то сделаю, вроде этого
public IEnumerator<T> GetEnumerator()
{
yield return 1;
yield return 2;
}
Могу ли я получить блокировку в начале метода и удерживается ли эта блокировка до тех пор, пока перечислитель не вернет значение null или пока перечислитель не будет GC'd?
Что произойдет, если вызывающий объект сбрасывает перечислитель и т. д. -
Думаю, мой вопрос в том, как лучше всего управлять блокировкой при работе с перечислителем
Примечание: Клиент не может нести ответственность за синхронизацию потоков - Внутренний класс должен быть
И, наконец, приведенный выше пример является упрощением проблемы. Операторы yield делают немного больше, чем я показал :)