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 – 没有ViewContext的Url表单操作
- asp.net – 帮助捕获StackOverflowException与WinDbg和ADPl
- asp.net-mvc – 特定便携式区域的ControllerFactory
- asp.net – 具有完全内存错误的WCF服务(内存门检查失败,因为
- 使用异步页面的ASP.NET中彗星更容易吗?
- asp.net – 实际文化是否与SQL相关联到CLR float-double转换
- Asp.NET处理程序和通用处理程序
- asp.net-mvc – ASP.NET MVC:Mock controller.Url.Action
- asp.net – HTTP错误404.4 – 未找到您要查找的资源没有与之
- asp.net – CSRF验证令牌:会话ID安全吗?
- asp.net-mvc – 如何给Razor MVC中的共享布局模型
- asp.net-mvc – ASP.NET MVC用户友好401错误
- asp.net – 我希望从代码中获取属性值
- asp.net-mvc-3 – 绑定到MVC3中的DropDownList
- asp.net-mvc-3 – 在ASP.NET MVC 3中覆盖/禁用授
- ASP.Net httpruntime executionTimeout不工作(而
- 什么是最好的.NET库的OpenID和ASP.NET MVC?
- .net – 使用FileStreamResult,MemoryStream是如
- 解决asp.net Sharepoint无法连接发布自定义字符串
- ASP.NET 4.0中最好的浏览器检测解决方案
