【发布时间】:2018-07-13 11:33:52
【问题描述】:
在 Asp.net Web Form 应用程序中,如果需要很长时间,我有生成报告按钮和取消按钮来取消报告生成过程。
当我单击“生成报告”时,它会执行繁重的任务,3 秒后我尝试通过单击“取消”按钮取消此繁重的任务。
但是用于取消按钮单击的服务器端代码会在一段时间后被调用。
我什至尝试在JavaScript 中使用window.stop() 来停止页面加载并快速访问服务器代码,但仍然存在延迟。
代码:
protected void btnExportExcel_Click(object sender, EventArgs e)
{
// Doing Heavy Task to Generate Report
}
protected void btnCancel_Click(object sender, EventArgs e)
{
if (Response.IsClientConnected)
{
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
}
<asp:Button ID="btnCancel" runat="server" Text="Cancel Request"
OnClientClick="return StopPageLoading();" OnClick="btnCancel_Click" />
function StopPageLoading() {
try
{
window.stop();
} catch (exception)
{
document.execCommand('Stop'); // for IE and other browsers
}
}
当当前请求正在处理中时,如何允许在单击时快速启动另一个请求?
如何让UI做出响应?
更新:
重现情况:
- 我点击 Export To Excel ,需要 7 分钟处理。
- 当我仍在处理时,我单击了取消按钮,需要另外 5 分钟才能取消。
我读到 Concurrent request 在 Asp.NET 中是不可能的,因为会话状态会产生排他锁。
那么如何快速取消呢?
让我的方法async 有助于克服会话状态排他锁问题吗?
【问题讨论】:
-
您能告诉我们您使用的 .Net-Framework 版本吗?
-
当您单击取消按钮时,您会延迟多少时间?
-
您必须使用 ajax 调用 webservice/api 来使 UI 响应。普通的 PostBack 无法做到这一点。
-
@VDWWD ,好吧,可以说
ExportExcel点击是正常的PostBack调用,而取消按钮点击是 ajax 调用。当ExportExcelclick 正在处理时,取消按钮点击事件会很快发生吗? -
@Darem ,我正在使用
.NET 4.5并且延迟为 5 分钟,单击导出到 excel 后我等待 5 分钟,当它仍在处理时,我单击取消按钮,现在它应该停止处理速度快。但取消需要时间。