Создание GetEnumerator ThreadSafe

Как именно работают счетчики - я знаю, что они строят конечный автомат за кулисами, но если я дважды вызову GetEnumerator, получу ли я два разных объекта?

Если я что-то сделаю, вроде этого

  public IEnumerator<T> GetEnumerator()
  {
     yield return 1;
     yield return 2;
  }

Могу ли я получить блокировку в начале метода и удерживается ли эта блокировка до тех пор, пока перечислитель не вернет значение null или пока перечислитель не будет GC'd?

Что произойдет, если вызывающий объект сбрасывает перечислитель и т. д. -

Думаю, мой вопрос в том, как лучше всего управлять блокировкой при работе с перечислителем

Примечание: Клиент не может нести ответственность за синхронизацию потоков - Внутренний класс должен быть

И, наконец, приведенный выше пример является упрощением проблемы. Операторы yield делают немного больше, чем я показал :)

5
задан Femaref 8 May 2011 в 08:44
поделиться