异步action方法返回一个Task,无法同步执行

问题描述 投票:0回答:2

此代码在我的本地计算机上运行良好

public async Task<ActionResult> teststuff()
    {

        using (var client = new HttpClient())
        {

            var twitter = await client.GetStringAsync("http://www.twitter.com");
            Response.Write(twitter);
        }

        return View();
    }

但是,当我上传到服务器时,我收到错误响应

“/”应用程序中的服务器错误。

异步操作方法“teststuff”返回一个任务,其中 无法同步执行。 描述:未处理 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误和的更多信息 它起源于代码的地方。

异常详细信息:System.InvalidOperationException:异步 操作方法“teststuff”返回一个无法执行的任务 同步进行。

来源错误:

执行过程中产生了未处理的异常 当前的网络请求。有关原产地和地点的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[InvalidOperationException:异步操作方法“teststuff” 返回一个Task,该Task不能同步执行。]
System.Web.Mvc.Async.TaskAsyncActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary

2 parameters) +125
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数)+39
System.Web.Mvc.<>c__DisplayClass13.b__10() +120 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func
1 continuation) +637
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1过滤器,ActionDescriptor actionDescriptor, IDictionary`2个参数)+307
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext 控制器上下文,字符串操作名称)+688
NotFoundMvc.ActionInvokerWrapper.InvokeActionWith404Catch(ControllerContext 控制器上下文,字符串操作名称)+54
NotFoundMvc.ActionInvokerWrapper.InvokeAction(ControllerContext 控制器上下文,字符串操作名称)+19
System.Web.Mvc.<>c__DisplayClass1d.b__19() +40
System.Web.Mvc.Async.<>c__DisplayClass1.b__0() +15
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 System.Web.Mvc.Async.<>c__DisplayClass4.b__3(IAsyncResult ar) +15
System.Web.Mvc.<>c__DisplayClass8.b__3(IAsyncResult 异步结果)+42
System.Web.Mvc.Async.<>c__DisplayClass4.b__3(IAsyncResult ar) +15
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,布尔值&同步完成)+288

------------------------------------------------- ------------------------------- 版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET版本:4.0.30319.17929

我的服务器上缺少一些东西,但无法找出它是什么,我们将不胜感激。

我尝试在服务器上重新安装.net Framework 4.5,但没有效果。但是我确实注意到服务器上有两个

Microsoft .NET Framework 4 多目标包和 Microsoft .NET Framework 4.5 多目标包

不确定是否应该删除 4 个?

谢谢

asp.net-mvc-4 async-await
2个回答
3
投票

为了使用 Ninject 将依赖项注入到 MVC 属性中,我在子类化

ControllerActionInvoker
后遇到了这个错误。本页描述了执行此操作的过程:https://codeclimber.net.nz/archive/2009/02/09/how-to-use-ninject-to-inject-dependency-into-aspnet-mvc/

我的控制器中有一些异步方法,当调用这些异步方法时出现此错误。事实证明,我不需要子类化

ControllerActionInvoker
,而是
System.Web.Mvc.Async.AsyncControllerActionInvoker

更改基类后,我的代码很满意并且运行得很好。


1
投票

奇怪的是,我刚刚删除了网站中的所有文件,然后重新发布了该网站,一切正常。

我认为发生这种情况可能是因为我最近将站点从 MVC3 站点升级到 MVC4,并且目录中的 MVC3 站点可能留下了一个奇怪的 DLL。

感谢斯蒂芬的建议,它给了我清理网站并重新启动的想法

© www.soinside.com 2019 - 2024. All rights reserved.