gpt4 book ai didi

c# - 在 ASP.NET C# 页面转到不同页面时在后台运行存储过程

转载 作者:行者123 更新时间:2023-11-30 14:22:06 25 4
gpt4 key购买 nike

我想提交我的表单,然后让它转到另一个页面(告诉用户他们将在完成后收到一封电子邮件),同时在后台运行存储过程 (SQL)。

我不希望用户等待 30 分钟完成搜索,然后转到其他页面。我怎样才能做到这一点?

// Clicking on the Search button    
protected void btnSearch_Click(object sender, EventArgs e)
{
Guid SearchGUID;
SearchGUID = Guid.NewGuid();

Hashtable htSearch = new Hashtable();
htSearch["value"] = 2;

// Run the stored procedure (takes 30 mins)
objSmart.RunSearch(htSearch);

// Redirect to the other page
Response.Redirect("Search.aspx?search=" + SearchGUID.ToString());
}

最佳答案

如果您的后台任务只需要 30 到 90 秒,则可以使用 Async、线程池/Tasks 库或任何数量的其他解决方案来处理。但是一旦开始需要几分钟,或者在您的情况下需要 30 多分钟,您就需要一个更强大的进程外解决方案。 ASP.NET 的体系结构并不是为长时间运行的后台线程设计的。 IIS 将以随机间隔回收您的应用程序池/域以优化资源使用,虽然它会尽最大努力让您的线程完成,但这并不能保证。参见 Scot Hanselman's blog post on this subject了解一些背景和建议。

根据您的应用程序限制,您可以考虑以下几种解决方案:

  • 如果您使用的是 MS SQL Server,则可以将存储过程和完成电子邮件封装在您 kick off from your web app 的 SQL 代理作业中。 . (您甚至可以在 SQL Server 中运行 .NET 代码,尽管它并不漂亮。)
  • 您可以编写真正的后台进程作为 EXE 文件运行并托管在 Windows 任务计划程序中。您的网络应用程序可以手动启动此任务,例如C# start a scheduled task .
  • 您可以使用第三方后台任务/队列框架,例如 https://www.hangfire.io/ .

关于c# - 在 ASP.NET C# 页面转到不同页面时在后台运行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com