/// <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 }
public void OnComplete(IAsyncCompletion callback) { if (task == null) { callback.Step(); } else { task.OnComplete(callback); } }