Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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);
 }