public void OnCompleted(Action continuation)
{
if (continuation == null)
throw new ArgumentNullException ("continuation");
if (TaskScheduler.Current == TaskScheduler.Default) {
//
// Pass continuation as an argument to avoid allocating
// hoisting class
//
ThreadPool.QueueUserWorkItem (l => ((Action) l) (), continuation);
} else {
new Task (continuation).Start (TaskScheduler.Current);
}
}