asp.net-mvc – 如何在MVC的耗时操作中使用AsyncController或Tas
我有一个简单但耗时的操作:
当用户单击按钮时,它执行数据库密集型操作,将导入表中的记录处理到多个其他表中,一次一个导入记录. 我有一个带有触发操作的按钮的视图,在操作结束时会显示一个报告. 我正在寻找方法通知用户我正在处理的操作正在处理. 我一直在网上阅读有关MVC中异步操作的内容.我发现有很多链接说如果你的进程受CPU约束,那就坚持使用同步操作了.数据库相关进程是否被视为CPU绑定? 此外,如果我得到了异步操作路由,我应该使用如here所述的AsyncController,或者只使用我在上面提到的例子中的任务以及here.还是他们都一样? 解决方法
您需要知道的第一件事是
async doesn’t change the HTTP protocol.正如我在博客中描述的那样,HTTP协议为每个请求提供一个响应.因此,一旦说它“正在进行中”,你就不能回来,之后再回来说它已经“完成”了.
简单的解决方案是仅在完成时返回,并且只使用AJAX在客户端抛出一些“进行中…”通知,在请求完成时更新页面.如果您想变得更复杂,可以使用SignalR之类的服务器让服务器在请求完成时通知客户端. 特别是,异步MVC操作不会返回“早期”; ASP.NET将等待所有异步操作完成,然后发送响应.服务器端的异步代码都是关于可伸缩性的,而不是响应性. 也就是说,我通常建议在服务器端使用异步代码.唯一的例外是如果您只有一个数据库后端(很好地讨论了in this blog post).如果您的后端是数据库集群或分布式/ NoSQL / SQL Azure数据库,那么您应该考虑使其异步. 如果您决定使服务器异步,只需返回Tasks; AsyncController现在只是为了向后兼容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何编写没有Try/Catch的程序
- ASP.net没有为某些用户代理生成javascript
- asp.net-mvc – MVC反伪造令牌如何在Web服务器重启之间存活
- 如何使用APDU将PIN验证代码发送到智能卡 – 使用.NET
- 关闭一个子目录的ASP.Net WebForms身份验证
- Blazor——Asp.net core的新前端框架
- asp.net – MySQL ::连接器/净欧元符号
- asp.net-mvc-3 – 在ajax发布之前使用unobtrusive进行验证
- oauth-2.0 – 覆盖AccessTokenExpireTimeSpan
- asp.net-mvc – 在asp .net mvc 5中预编译razor视图
- asp.net-mvc – ASP.NET WEB API将DateTime作为U
- asp.net-mvc – 在MVCContrib网格中格式化布尔列
- 什么是ASP.NET中的gpstate文件
- asp.net – 如何在南希显示我的404页面?
- asp.net-mvc – 设置登台和生产环境,最大限度地减
- asp.net-mvc – 在AJAX请求之前单击按钮时的客户
- asp.net-mvc – 使用MVC Web应用程序时Nhibernat
- asp.net – 如何更改F#Canopy UI测试脚本中的下拉
- asp.net – 在PostBack期间Recaptcha消失
- 在IIS托管的asp.net Web应用程序中打开页面时“无