Esempio n. 1
0
 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();
 }
Esempio n. 2
0
 public EnumeratorEnumerable(IEnumerator <T> e, EnumeratorEnumerableMode allowBlocking)
 {
     _enumerator    = e;
     _allowBlocking = allowBlocking;
 }