Example #1
0
		private void Deactivate ()
		{
			state = INACTIVE;

			waitObject = null;
			waitBlock = null;
			hint = null;
			callback = null;
			cbparker = null;
			cbState = null;

			WaitHandle no;
			if ((no = notificationObject) != null) {
				notificationObject = null;
				no.Signal ();
			}
		}
Example #2
0
		internal RegisteredWaitHandle (WaitHandle waitObject, WaitOrTimerCallback callback, 
												 object cbState, int timeout, bool executeOnlyOnce)
		{
			this.waitObject = waitObject;
			this.callback = callback;
			this.cbState = cbState;
			this.timeout = timeout;
         this.executeOnlyOnce = executeOnlyOnce;

			StWaitable waitable;
			if ((waitable = waitObject.waitable) == null) {

				/*
				 * Either we're dealing with a disposed wait handle
				 * or with some other derived class.
				 */
 
				UnparkCallback (StParkStatus.Inflated);
				return;
			}

			cbparker = new CbParker (UnparkCallback, false, true);
			int ignored = 0;
         waitBlock = waitable._WaitAnyPrologue (cbparker, StParkStatus.Success, ref hint, ref ignored);

			state = ACTIVE;
         int ws = cbparker.EnableCallback (timeout);
         if (ws != StParkStatus.Pending) {
				UnparkCallback (ws);
	      }
		}
Example #3
0
		internal CancellationTokenRegistration RegisterInternal (Action<Object> callback, 
																					object cbState,
																					bool useSynchronizationContext,
																					bool useExecutionContext)
      {
			if (!CanBeCanceled) {
				return new CancellationTokenRegistration ();
			}

         var cbParker = new CbParker (_ => callback (cbState), useSynchronizationContext,
      	                             useExecutionContext);

			if (RegisterParker (cbParker) && 
				 cbParker.EnableCallback (Timeout.Infinite) == StParkStatus.Pending) {
				return new CancellationTokenRegistration (cbParker, this);
			}

			callback (cbState);
			return new CancellationTokenRegistration ();
      }