asp.net中的线程何时终止?
问题描述:
我有一个asp.net程序,我需要发送大量的电子邮件。 当我打电话http://localhost:70/sendemails 系统将在分开的线程中逐一发送电子邮件(就像异步)。 我不知道这是否是最好的方法。 但我想知道的是:我计划发送10000封电子邮件,并在我打电话给链接,然后关闭浏览器(意味着会话将被关闭), 然后,如果我创建的线程也将被终止?asp.net中的线程何时终止?
什么是发送大量电子邮件的最佳方法?
答
我建议ASP.NET应用程序将信息写入某个描述的队列中 - 无论是消息队列还是数据库中的表。
然后有一个单独的服务运行来处理队列并发送电子邮件。这样,在回复之前,您无需等到电子邮件地址为发送,但仍然可以确定在页面响应时,请求已被保留。
另一种方法是启动一个新线程在ASP.NET应用程序中发送电子邮件,但这意味着如果应用程序崩溃(或被回收),请求将会丢失。将持久性和容错性放在单独的服务IMO中更容易。
答
线程不应该被关闭浏览器终止。什么可以终止线程将是应用程序的回收(如果内存增长过多或出现其他特定条件)。
发送邮件的最佳方法是有一个单独的windows服务,但如果这是不可能的,那么使用线程可能是一个可行的想法,假设您有一种机制来重新启动应用程序回收线程并重新启动从它离开的地方发送。重新启动的问题是,您需要向页面发出请求才能恢复线程 - 例如,您可以使用计划任务控制的计算机执行此操作。可以工作,但与Windows服务相比不是很可靠。
Yeap-像MSMQ一样会做。 – RichardOD 2009-10-05 08:45:15