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

asp.net – 使用冗长的服务器进程取消asynch回发

发布时间:2020-12-16 09:34:16 所属栏目:asp.Net 来源:网络整理
导读:我在取消异步回发时遇到了一些麻烦.我有一个更新面板,其中包含一个取消按钮,以便用户可以取消回发.当用户单击按钮以生成报告时,将显示更新进度.该报告可能需要一些时间,因为它必须循环一千次左右才能创建一个Excel电子表格.如果用户因任何原因决定取消运行报
我在取消异步回发时遇到了一些麻烦.我有一个更新面板,其中包含一个取消按钮,以便用户可以取消回发.当用户单击按钮以生成报告时,将显示更新进度.该报告可能需要一些时间,因为它必须循环一千次左右才能创建一个Excel电子表格.如果用户因任何原因决定取消运行报告,则可以单击取消按钮,然后在 javascript中调用abortPostBack(),这将停止更新进度并再次显示该页面.但是,用户无法执行任何其他操作,例如导航到另一个页面,因为服务器仍在处理循环.当用户点击取消按钮时,如何停止服务器处理的循环?任何帮助赞赏!

解决方法

您是说在异步回发完成之前,客户端无法访问简单的HTTP链接?如果是这样,这听起来像一个难题,因为您要么必须优化服务器端进程,要么设置较小的服务器端请求超时.要么重新设计用户交互,要么使服务器端Excel生成过程成为异步,而不是同步,这样用户就不必等到Excel生成完成.你可以在客户端看上去然后设置一个 JavaScript计时器来定期查询服务器以查看文件是否准备就绪,如果是,请向用户表明并给他们一个下载文件链接选项,或者其他什么.

否则,如果您可以在等待返回时调用另一个AJAX请求(您可能不会听到它),您可以简单地执行一个“取消”长时间运行进程的新HTTP请求.但这似乎不起作用,因为服务器仍在处理长时间运行的HTTP请求.所以我选择调查我的第一段中的选项.

如果取消确实允许在客户端执行异步HTTP请求,则可以设置会话状态值以指示已请求取消.就个人而言,我不会这样做.但是如果你这样做了,那么你长期运行的服务器端进程可能会定期查找是否存在会话值.说:

if (Session["cancel-me"] != null) 
{
    Session["cancel-me"] = null;
    abortThisLongProcess();
}

(编辑:李大同)

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

    推荐文章
      热点阅读