private void CompleteAsyncBlock(object state)
            {
                AsyncWorkState asyncWorkState = (AsyncWorkState)state;

                RunTimer(asyncWorkState.Duration);

                UserTrace.Trace(asyncWorkState.ListenerExtension, asyncWorkState.InstanceID, AsyncOperationBlockExited);

                Complete(false);
            }
        protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
        {
            TestTraceListenerExtension listenerExtension = context.GetExtension <TestTraceListenerExtension>();

            UserTrace.Trace(listenerExtension, context.WorkflowInstanceId, AsyncOperationBlockEntered);

            AsyncWorkState asyncWorkState = new AsyncWorkState()
            {
                InstanceID        = context.WorkflowInstanceId,
                Duration          = this.Duration.Get(context),
                ListenerExtension = listenerExtension
            };

            return(new AsyncOperationBlockActivityAsyncResult(asyncWorkState, callback, state));
        }
 public AsyncOperationBlockActivityAsyncResult(AsyncWorkState asyncWorkState, AsyncCallback callback, object state)
     : base(callback, state)
 {
     ThreadPool.QueueUserWorkItem(new WaitCallback(CompleteAsyncBlock), asyncWorkState);
 }