我想提交我的表单,然后在后台运行存储过程(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());
}
答案 0 :(得分:6)
如果您的后台任务仅需30〜90秒,则可以使用Async,线程池/任务库或任何其他解决方案来处理。但是,一旦开始花费几分钟,或者您的情况是30分钟以上,您就需要一个更强大的过程外解决方案。 ASP.NET的体系结构不是为长时间运行的后台线程而设计的。 IIS将随机回收应用程序池/域以优化资源使用,尽管它会尽最大努力使线程完成,但并不能保证。有关一些背景和建议,请参见Scot Hanselman's blog post on this subject。
根据您的应用程序约束,您可以考虑以下几种解决方案:
答案 1 :(得分:0)
您需要以mentioned here的身份运行方法async。
这将调用该方法,然后转到下一个项目。