asp.net中的线程何时终止?

时间:2009-10-05 08:41:39

标签: asp.net-mvc sendmail

我有一个asp.net程序,我需要发送很多电子邮件。 当我打电话给http://localhost:70/sendemails时 系统将在单独的线程中逐个发送电子邮件(就像异步一样)。 我不知道这是不是最好的方法。 但我想知道的是:我计划发送10000封电子邮件,在我调用链接后,然后关闭浏览器(意味着会话也将关闭), 那么如果我创建的线程也将被终止?

发送大量电子邮件的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

我建议ASP.NET应用程序将信息写入某个描述的队列中 - 无论是消息队列还是数据库中的表。

然后运行单独的服务来处理队列并发送电子邮件。这样您就不需要等到电子邮件发送之后才会回复,但您仍然可以确定在页面响应时,请求已被保留。

另一种选择只是启动一个新线程来在ASP.NET应用程序中进行电子邮件发送,但这意味着如果应用程序被淘汰(或被回收),请求将会丢失。将持久性和容错性放在单独的服务IMO中更容易。

答案 1 :(得分:0)

关闭浏览器不应终止该线程。什么可以终止线程将是应用程序的回收(如果内存增长太多,或出现其他特定条件)。

邮件发送的最佳方法是使用单独的Windows服务,但如果不可能,则使用线程可能是一个可行的想法,前提是您有一种机制可以在应用程序上重新启动线程并重新启动从它离开的地方发送。重新启动的问题是您需要页面请求才能恢复线程 - 例如,您可以使用计划任务从您控制的计算机执行此操作。可以工作,但与Windows服务相比不是很可靠。