C#Fire和忘记考虑因素

时间:2012-03-16 10:33:46

标签: asp.net thread-safety

我正在考虑使用fire-and-forget模式从ASP / C#应用程序发送电子邮件,因此用户不会在它做任何事情时等待。我之前使用过该模式,非常像本文所解释的那样;

http://microsoftmentalist.com/2012/02/02/asp-netcall-synchronous-method-asynchronously-asp-net-fire-and-forget/

所有非常简单的东西,但我真的需要了解性能方面的考虑因素。我是否应该在每次需要发送电子邮件时继续创建新线程,并且只相信框架来管理它们?或者有没有办法在线程结束后手动将线程放回池中?

3 个答案:

答案 0 :(得分:5)

不要饿死应用程序的ThreadPool。相反,如果要在单个进程中创建大量线程,请使用SmartThreadPool。有一个火&忘记文章中的例子。

但是......弹出电子邮件的最简单方法是使用QueueUserWorkItem:

ThreadPool.QueueUserWorkItem(o => SendEmail(emailTo, emailFrom, emailSubject, emailBody));

您不必担心将线程放回线程池中。使用ThreadPool类时,会自动通过框架处理Threadpool管理。

答案 1 :(得分:2)

理想情况下,您可以使用ThreadPool提交工作项。它将抽象出正确的线程池和管理,以便您的应用程序保持响应和稳定,并且不会让开发人员弄乱它:)

答案 2 :(得分:1)

您提供的链接中的代码正在使用线程池,您无需关心它。它将使用池中的一个线程,它将在完成后将线程放回池中。