Пример #1
0
 /// <summary>
 /// ConditionVariableWaiter constructor
 /// </summary>
 /// <param name="sourceWaiter">Source ConditionVariable</param>
 /// <param name="timeout">Initial operation timeout</param>
 /// <param name="startTime">Time when entered the lock</param>
 /// <param name="token">Cancellation token</param>
 /// <param name="cancellationTokenReg">Cancellation token registration</param>
 internal ConditionVariableWaiter(ConditionVariable sourceWaiter, int timeout, uint startTime, CancellationToken token, CancellationTokenRegistration cancellationTokenReg)
 {
     _sourceWaiter         = sourceWaiter;
     _timeout              = timeout;
     _startTime            = startTime;
     _token                = token;
     _cancellationTokenReg = cancellationTokenReg;
 }
Пример #2
0
 /// <summary>
 /// Exit the lock section
 /// </summary>
 public void Dispose()
 {
     if (_sourceWaiter != null)
     {
         _sourceWaiter.Exit(ref this); // Exit lock before disposing CancellationTokenRegistration
         _cancellationTokenReg.Dispose();
         _sourceWaiter = null;
     }
 }
Пример #3
0
        /// <summary>
        /// Cancellation handler for CancellationToken
        /// </summary>
        /// <param name="obj">ConditionVariable object</param>
        private static void CancellationTokenCanceledEventHandler(object obj)
        {
            ConditionVariable conditionVar = obj as ConditionVariable;

            TurboContract.Assert(conditionVar != null, conditionString: "conditionVar != null");
            lock (conditionVar.InternalLock)
            {
                Monitor.PulseAll(conditionVar.InternalLock);
            }
        }
Пример #4
0
        /// <summary>
        /// Cancellation handler for CancellationToken
        /// </summary>
        /// <param name="obj">ConditionVariable object</param>
        private static void CancellationTokenCanceledEventHandler(object obj)
        {
            ConditionVariable conditionVar = obj as ConditionVariable;

            Debug.Assert(conditionVar != null);
            lock (conditionVar.InternalLock)
            {
                Monitor.PulseAll(conditionVar.InternalLock);
            }
        }