2012-03-16 51 views
1

我正在考虑使用一个即发即弃模式从ASP/C#应用程序发送电子邮件,所以用户不会在它做它的事情时等待。我之前使用过这个模式,就像这篇文章解释的一样。C#火和忘记考虑因素

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

一切都非常简单的东西,但我真的需要知道的关于性能方面的考虑。每次我需要发送一封电子邮件时,我是否应该继续创建新线程,并且只是相信框架来管理它们?或者有什么办法可以在完成后手动将线程放回池中?

+0

该链接看起来很糟糕。 – 2015-10-07 18:26:54

+0

斯蒂芬C也有一个很好的一个在这里:https://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html – Fildor 2017-09-07 07:06:09

回答

5

请勿挨饿应用程序的ThreadPool。如果您在一个进程中创建大量线程,请使用SmartThreadPool。有一篇文章中忘记示例的消息&。

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

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

您不需要担心把线程回到线程池。使用ThreadPool类时,通过框架自动处理线程池管理。

2

理想情况下,您可以使用ThreadPool提交您的工作项目。它会提取线程的适当池和管理,以便您的应用程序保持响应和稳定,并且不需要开发人员将其搞乱:)

1

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

相关问题