Exemple #1
0
 private void Finish()
 {
     ThreadingHelper.SpinWaitWhile(ref _status, _changing);
     if (Interlocked.CompareExchange(ref _status, _executing, _created) == _created)
     {
         var callback = Volatile.Read(ref Callback);
         if (callback != null)
         {
             callback.Invoke();
             Close();
             Volatile.Write(ref _status, _executed);
         }
     }
 }
Exemple #2
0
 private void Initialize(long dueTime)
 {
     if (Thread.VolatileRead(ref _executed) == 1)
     {
         ThreadingHelper.SpinWaitWhile(ref _completed, 1);
         Thread.VolatileWrite(ref _executed, 0);
     }
     _start      = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow());
     _targetTime = _start + dueTime;
     if (_wrapped == null)
     {
         _wrapped = new Timer(Callback, null, dueTime, System.Threading.Timeout.Infinite);
     }
     else
     {
         _wrapped.Change(dueTime, System.Threading.Timeout.Infinite);
     }
 }
Exemple #3
0
        private void Finish()
        {
            ThreadingHelper.SpinWaitWhile(ref _status, _changing);
            if (Interlocked.CompareExchange(ref _status, _executing, _started) != _started)
            {
                return;
            }

            var callback = Volatile.Read(ref _callback);

            if (callback == null)
            {
                return;
            }

            callback.Invoke();
            Volatile.Write(ref _status, _executed);
            Close();
        }