为什么这会返回System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult]

Dfw*_*ale 1 asp.net-mvc-4

不确定为什么在任务完成后这不会返回我的视图,我可以在Google上找到很多原因.

public async Task<ActionResult> GetUserAsync()
    {

        var value = Task.Factory.StartNew(() => _userService.GetUser("ausername"));

        await Task.WhenAll(value);

        return View("GetUser");
    }
Run Code Online (Sandbox Code Playgroud)

Dfw*_*ale 20

好吧,经过几个小时的调试并拉出我的头发剩下的东西,我找到了罪魁祸首.这是我的WindsorActionInvoker !! 从ControllerActionInvoker到AsyncControllerActionInvoker的更改解决了异步任务无法按预期工作的问题.

我希望这可以帮助别人.

public class WindsorActionInvoker : AsyncControllerActionInvoker
{
    private readonly IKernel _kernel;


    public WindsorActionInvoker(IKernel kernel)
    {
        _kernel = kernel;
    }

    protected override ActionExecutedContext InvokeActionMethodWithFilters(ControllerContext controllerContext,
                                                                           IList<IActionFilter> filters,
                                                                           ActionDescriptor actionDescriptor,
                                                                           IDictionary<string, object> parameters)
    {
        foreach (IActionFilter actionFilter in filters)
        {
            _kernel.InjectProperties(actionFilter);
        }
        return base.InvokeActionMethodWithFilters(controllerContext, filters, actionDescriptor, parameters);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你是一个节省生命的人! (4认同)