我正在开发一个项目,有大量电子邮件发送其中的一部分,当用户单击按钮时,他/她会立即收到“感谢电子邮件已发送”作为响应,并且会触发相同的方法还有一个异步线程。
ThreadPool.QueueUserWorkItem(SendEMail, _message);
当用户单击发送按钮时,该线程将排队,但由于这是默认的Background Thread
我期望当页面响应结束时,该线程将被终止,但它没有发生,因为触发该线程的当前线程也是一个Background Thread
and a Worker Thread
,这意味着有一个未完成的前台线程(可以是主线程或工作线程)仍然存在,但我不知道它们何时完成,因为它们的完成时间会影响我的后台工作线程;当最后一个前台线程结束时,它会导致进程终止,后台线程也是如此。
我应该害怕这个还是 Asp.NET 可以自动处理它,我有点困惑,因为我已经阅读了很多关于它的东西,现在一切都混淆了。
您能澄清一下吗?
提前致谢。
将 ThreadPool 用于长时间运行的任务将对应用程序的性能产生负面影响(因为 ASP.NET 也使用 ThreadPool 来处理传入请求)。
如果创建太多线程,则为每个任务手动创建线程也可能成为问题。
我过去使用的一种技术是在启动应用程序时创建一个自定义线程池,并将任务排队到该线程池上。一个简单的自定义线程池可以由一个线程和一个任务队列组成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)