public override IAsyncResult BeginExecute(ControllerContext controllerContext, IDictionary <string, object> parameters, AsyncCallback callback, object state) { Task result = new ReflectedActionDescriptor(this.MethodInfo, this.ActionName, this.ControllerDescriptor).Execute(controllerContext, parameters) as Task; if (result == null) { throw new InvalidOperationException(String.Format("Method {0} should have returned a Task!", (object)this.MethodInfo)); } else { if (callback != null) { result.ContinueWith((Action <Task>)(_ => callback((IAsyncResult)result))); } return((IAsyncResult)result); } }