asp.net-mvc – ASP.NET MVC 4异步子操作
我有一个ASP.NET MVC 4应用程序针对.NET 4.5。我们的一个子操作使用HttpClient调用Web服务。
因为我们阻塞IO等待HttpClient响应,所以将代码转换为async / await模式是非常有意义的。然而,当MVC 4尝试执行子操作时,我们得到以下错误消息:
乍看起来,似乎MVC 4不支持在子操作中异步/等待。唯一剩下的选项是使用同步代码运行,并对异步任务强制执行“等待”。 众所周知,在ASP.NET上下文中,触摸.Result或.Wait()会导致一个立即死锁。我的异步逻辑被包装在一个类库中,所以我不能使用“await blah.ConfigureAwait(false)”技巧。记住,对子操作标记“异步”并使用await会导致错误,并且阻止我配置等待。 在这一点上我被画成一个角落。有没有什么方法来消耗异步方法在MVC 4儿童行动?看起来像一个扁平的bug,没有解决方法。 解决方法
还有一些MVC的部分不是异步友好的;我希望这些将在未来得到解决。请为此创建一个Connect或UserVoice问题。
您可能应该添加ConfigureAwait(false)到类库中的调用(如果可以)。 你也可以黑客一个替代解决方案。如果你的类库方法不需要ASP.NET上下文,那么你可以有一个线程池线程做(a)等待你: try { var result = Task.Run(async () => { await MyHttpRequest(...); }).Result; } catch (AggregateException ex) { ... } 效果类似于ConfigureAwait(false):因为MyHttpRequest在线程池上下文中运行,所以它不会尝试在完成时进入ASP.NET上下文。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 与SmtpClient.UseDefaultCredentials属性混
- asp.net-mvc – 如何在发布期间跳过文件夹上的删除?
- asp.net-mvc – MVC 3 – 使用List类型属性绑定到复杂类型
- .NET Core技术研究-HttpContext访问的正确姿势
- 使用MVC在ASP.NET中实现API的最佳方法是什么?
- asp.net – 使用Spark视图引擎在局部视图中使用不同的viewm
- asp.net-mvc – ASP.NET MVC:在视图上访问ViewModel属性
- entity-framework-4 – 工作单元是否应指向服务层或存储库?
- ASP.Net MVC如何将数据从视图传递到控制器
- ASP.NET MVC全能路由
- ASP.NET Core部署在IIS中后,报无法打开登录所请
- asp.net-mvc-3 – ViewBag- MVC3-ASP.NET
- asp.net-mvc – 将HTML属性添加到Html.BeginForm
- asp.net – 如何将javascript文件的服务限制为仅
- ASP.NET性能优化之构建自定义文件缓存
- asp.net-mvc-4 – signalR:/ signalr/hubs不生成
- asp.net-mvc – 根据需要处理ASP.NET MVC可选字段
- asp.net – Python / web scrape / aspx – 没有
- SQLXML初体验:用XML代替T-SQL来操作数据库
- asp.net – 可以让CompareValidator接受带逗号的