protected virtual IAsyncResult OnBeginExecute(AsyncCallback callback, object state) { LoadTempData(); try { string actionName = RouteData.GetRequiredValue <string>("action"); IActionExecutor executor = ActionExecutor; IAsyncActionExecutor asyncExecutor = (executor as IAsyncActionExecutor); if (asyncExecutor != null) { BeginInvokeDelegate beginDelegate = delegate(AsyncCallback asyncCallback, object asyncState) { return(asyncExecutor.BeginInvokeAction(Context, actionName, asyncCallback, asyncState, new ValueDictionary())); }; EndInvokeDelegate endDelegate = delegate(IAsyncResult asyncResult) { if (!asyncExecutor.EndInvokeAction(asyncResult)) { HandleUnknownAction(actionName); } }; return(AsyncResultWrapper.Begin(callback, state, beginDelegate, endDelegate, _tag)); } else { Action action = () => { if (!executor.InvokeAction(Context, actionName, null)) { HandleUnknownAction(actionName); } }; return(AsyncResultWrapper.BeginSynchronous(callback, state, action, _tag)); } } catch { SaveTempData(); throw; } }