是否可以使用 BackGroundWorker 线程ASP.NET http://en.wikipedia.org/wiki/ASP.NET2.0适合以下场景,让浏览器端的用户不用等待很长时间?
Scenario
- 浏览器请求一个页面,例如 SendEmails.aspx
- SendEmails.aspx 页面创建一个BackgroundWorker 线程,并为该线程提供足够的上下文来创建和发送电子邮件。
- 浏览器收到来自 ComposeAndSendEmails.aspx 的响应,表示正在发送电子邮件。
- 同时,后台线程正在进行创建和发送电子邮件的过程,这可能需要相当长的时间才能完成。
我主要关心的是如何保持BackgroundWorker 线程运行,尝试发送(比如50 封)电子邮件,而ASP.NET 工作进程线程池线程早已消失。
如果您不想使用 AJAX 库,或者电子邮件处理时间非常长并且会使标准 AJAX 请求超时,您可以使用 AsynchronousPostBack 方法,该方法是 .net 1.1 时代的“老黑客”。
本质上,您所做的就是让提交按钮以异步状态开始电子邮件处理,同时将用户带到中间页面。这样做的好处是,您可以根据需要刷新中间页面,而不必担心达到标准超时。
当您的后台进程完成时,它会在数据库/应用程序变量/其他内容中放置一个小“完成”标志。当您的中间页面自行刷新时,它会检测到此标志并自动将用户重定向到“完成”页面。
同样,AJAX 使所有这些变得毫无意义,但如果由于某种原因您有一个必须通过网络完成的非常密集或及时的流程,那么这个解决方案将适合您。我找到了一个很好的教程here http://www.simple-talk.com/dotnet/asp.net/asynchronous-client-script-callbacks/还有更多。
当我们开发一个与第三方应用程序交互的“Web 签入”类型应用程序时,我必须使用这样的流程,并且它们的导入 API 非常慢。
编辑:啊!诅咒你古兹拉尔和你神一般的打字能力 8^D。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)