我正在考虑使用fire-and-forget模式从ASP / C#应用程序发送电子邮件,因此用户不会在它做任何事情时等待。我之前使用过该模式,非常像本文所解释的那样;
所有非常简单的东西,但我真的需要了解性能方面的考虑因素。我是否应该在每次需要发送电子邮件时继续创建新线程,并且只相信框架来管理它们?或者有没有办法在线程结束后手动将线程放回池中?
答案 0 :(得分:5)
不要饿死应用程序的ThreadPool。相反,如果要在单个进程中创建大量线程,请使用SmartThreadPool。有一个火&忘记文章中的例子。
但是......弹出电子邮件的最简单方法是使用QueueUserWorkItem:
ThreadPool.QueueUserWorkItem(o => SendEmail(emailTo, emailFrom, emailSubject, emailBody));
您不必担心将线程放回线程池中。使用ThreadPool类时,会自动通过框架处理Threadpool管理。
答案 1 :(得分:2)
理想情况下,您可以使用ThreadPool
提交工作项。它将抽象出正确的线程池和管理,以便您的应用程序保持响应和稳定,并且不会让开发人员弄乱它:)
答案 2 :(得分:1)
您提供的链接中的代码正在使用线程池,您无需关心它。它将使用池中的一个线程,它将在完成后将线程放回池中。