public IWaitable Then(Action callback) { Assert.NotNull(callback, nameof(callback)); var call = false; using (spinLock.Hold()) { switch (status) { case WaitableStatus.Success: call = true; break; case WaitableStatus.Running: successCallbacks.Add(callback); break; } } if (call) { callback(); } return(this); }
private T Add <T>(T waitable) where T : IWaitable { using (spin.Hold()) { waitables.Add(waitable); } waitable.Finally(() => { using (spin.Hold()) { waitables.Remove(waitable); } }); return(waitable); }