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()); }
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(); } } } }
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()); }