Ejemplo n.º 1
0
        public void ScheduleTerminateExecution()
        {
            int currentCancelToken = ++_currentCancelToken;

            if (Interlocked.CompareExchange(ref _cancelTokenOrStatus, Scheduled, NonScheduled) != NonScheduled) //TODO: no need for interlocked?
            {
                throw new InvalidOperationException("ScheduleTerminateExecution cannot be called while previous one has not been canceled");
            }
            if (_cancelCallbackFactory != null) // allow nulls in tests
            {
                var terminateRequested = new CancelRef();
                _terminateRequested = terminateRequested;
                _cancelCallbackFactory(
                    1000, () => AnotherThreadCancel(currentCancelToken, GetHandle(), terminateRequested.Terminate));
            }
            else
            {
                _terminateRequested = _defaultCancelRef;
            }
        }
Ejemplo n.º 2
0
 public void ScheduleTerminateExecution()
 {
     int currentCancelToken = ++_currentCancelToken;
     if (Interlocked.CompareExchange(ref _cancelTokenOrStatus, Scheduled, NonScheduled) != NonScheduled) //TODO: no need for interlocked?
         throw new InvalidOperationException("ScheduleTerminateExecution cannot be called while previous one has not been canceled");
     if (_cancelCallbackFactory != null) // allow nulls in tests
     {
         var terminateRequested = new CancelRef();
         _terminateRequested = terminateRequested;
         _cancelCallbackFactory(
             1000, () => AnotherThreadCancel(currentCancelToken, GetHandle(), terminateRequested.Terminate));
     }
     else
     {
         _terminateRequested = _defaultCancelRef;
     }
 }