/// <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; }
/// <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; } }
/// <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); } }
/// <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); } }