Exemple #1
0
 public TReturn DisposedConditional <TReturn>(Func <TReturn> whenDisposed, Func <TReturn> whenNotDisposed)
 {
     if (_status == -1)
     {
         if (ReferenceEquals(whenDisposed, null))
         {
             return(default(TReturn));
         }
         return(whenDisposed.Invoke());
     }
     if (ReferenceEquals(whenNotDisposed, null))
     {
         return(default(TReturn));
     }
     if (ThreadingHelper.SpinWaitRelativeSet(ref _status, 1, -1))
     {
         try
         {
             return(whenNotDisposed.Invoke());
         }
         finally
         {
             Interlocked.Decrement(ref _status);
         }
     }
     if (ReferenceEquals(whenDisposed, null))
     {
         return(default(TReturn));
     }
     return(whenDisposed.Invoke());
 }
Exemple #2
0
 public void DisposedConditional(Action whenDisposed, Action whenNotDisposed)
 {
     if (_disposeStatus == -1)
     {
         whenDisposed?.Invoke();
     }
     else
     {
         if (whenNotDisposed != null)
         {
             if (ThreadingHelper.SpinWaitRelativeSet(ref _disposeStatus, 1, -1))
             {
                 try
                 {
                     whenNotDisposed.Invoke();
                 }
                 finally
                 {
                     Interlocked.Decrement(ref _disposeStatus);
                 }
             }
             else
             {
                 whenDisposed?.Invoke();
             }
         }
     }
 }
Exemple #3
0
 public void DisposedConditional(Action whenDisposed, Action whenNotDisposed)
 {
     if (_status == -1)
     {
         if (!ReferenceEquals(whenDisposed, null))
         {
             whenDisposed.Invoke();
         }
     }
     else
     {
         if (!ReferenceEquals(whenNotDisposed, null))
         {
             if (ThreadingHelper.SpinWaitRelativeSet(ref _status, 1, -1))
             {
                 try
                 {
                     whenNotDisposed.Invoke();
                 }
                 finally
                 {
                     Interlocked.Decrement(ref _status);
                 }
             }
             else
             {
                 if (!ReferenceEquals(whenDisposed, null))
                 {
                     whenDisposed.Invoke();
                 }
             }
         }
     }
 }
 public TReturn DisposedConditional <TReturn>(Func <TReturn> whenDisposed, Func <TReturn> whenNotDisposed)
 {
     if (_disposeStatus == -1)
     {
         if (whenDisposed == null)
         {
             return(default(TReturn));
         }
         return(whenDisposed.Invoke());
     }
     if (whenNotDisposed == null)
     {
         return(default(TReturn));
     }
     if (ThreadingHelper.SpinWaitRelativeSet(ref _disposeStatus, 1, -1))
     {
         try
         {
             return(whenNotDisposed.Invoke());
         }
         finally
         {
             System.Threading.Interlocked.Decrement(ref _disposeStatus);
         }
     }
     if (whenDisposed == null)
     {
         return(default(TReturn));
     }
     return(whenDisposed.Invoke());
 }