예제 #1
0
        /// <summary>
        /// Registers a completion callback,
        /// </summary>
        /// <param name="x"></param>
        public void OnComplete(IAsyncCompletion callback)
        {
            if (this.state >= TaskState.Done)
            {
                callback.Step();
                return;
            }
            var p = new Completion();

            p.Action = callback;
                        #if COOPER
            lock (this) {
                if (this.state >= TaskState.Done)
                {
                    callback.Step();
                    return;
                }
                p.Next     = completion;
                completion = p;
            }
                        #else
            SpinLockEnter(ref @lock);
            if (this.state >= TaskState.Done)
            {
                SpinLockExit(ref @lock);
                callback.Step();
                return;
            }
            p.Next     = completion;
            completion = p;
            SpinLockExit(ref @lock);
                        #endif
        }
예제 #2
0
 public void OnComplete(IAsyncCompletion callback)
 {
     if (task == null)
     {
         callback.Step();
     }
     else
     {
         task.OnComplete(callback);
     }
 }