private static void core <T>(AsyncOperation <T> returns, Func <IAsyncOperation <T> > agileCallback) { if (returns.Status == AsyncStatus.Canceled) { return; } try { var task = agileCallback(); returns.RegisterCancellation(task.Cancel); task.Completed = (sender, e) => { if (returns.Status == AsyncStatus.Canceled) { sender.Close(); return; } switch (e) { case AsyncStatus.Completed: returns.TrySetResults(sender.GetResults()); break; case AsyncStatus.Error: returns.TrySetException(sender.ErrorCode); break; case AsyncStatus.Canceled: returns.TrySetCanceled(); break; } }; } catch (Exception ex) { returns.TrySetException(ex); } }