加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在MVC的耗时操作中使用AsyncController或Tas

发布时间:2020-12-16 07:00:24 所属栏目:asp.Net 来源:网络整理
导读:我有一个简单但耗时的操作: 当用户单击按钮时,它执行数据库密集型操作,将导入表中的记录处理到多个其他表中,一次一个导入记录. 我有一个带有触发操作的按钮的视图,在操作结束时会显示一个报告. 我正在寻找方法通知用户我正在处理的操作正在处理. 我一直在网
我有一个简单但耗时的操作:
当用户单击按钮时,它执行数据库密集型操作,将导入表中的记录处理到多个其他表中,一次一个导入记录.
我有一个带有触发操作的按钮的视图,在操作结束时会显示一个报告.

我正在寻找方法通知用户我正在处理的操作正在处理.

我一直在网上阅读有关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现在只是为了向后兼容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读