internal LockingEnumWrapper(IEnumerator <T> wrap, EnumeratorEnumerableMode allowBlocking) { _wrap = wrap; if (allowBlocking == EnumeratorEnumerableMode.Blocking) { Monitor.Enter(_wrap); } else if (!Monitor.TryEnter(_wrap)) { throw new InvalidOperationException("Thread conflict accessing busy Enumerator") { Source = "LockingEnumWrapper" } } ; lock (BusyTable) { if (BusyTable.Contains(_wrap)) { throw new LockRecursionException("Self lock (deadlock) conflict accessing busy Enumerator") { Source = "LockingEnumWrapper" } } ; BusyTable.Add(_wrap); } // always implicit Reset _wrap.Reset(); }
public EnumeratorEnumerable(IEnumerator <T> e, EnumeratorEnumerableMode allowBlocking) { _enumerator = e; _allowBlocking = allowBlocking; }