在尝试在我的ASP.Net MVC 3应用程序中实现SMTP异步电子邮件时,我遇到了SO SmtpClient.SendAsync blocking my ASP.NET MVC Request线程。在那里,我发现了Phil Haack的文章:The Dangers of Implementing Recurring Background Tasks In ASP.NET,该文章提供了一种避免在AppDomain关闭时后台线程崩溃的方法。
文章建议在构造函数中调用
在一般情况下,当请求永久到达并且实现
文章建议在构造函数中调用
HostingEnvironment.RegisterObject(this);
,并且仅在调用IRegisteredObject.Stop Method时调用HostingEnvironment.UnregisterObject(this);
。在一般情况下,当请求永久到达并且实现
IRegisteredObject
的对象的范围是请求时,这种方法是否会在每个请求中注册对象(利用电子邮件功能)并且不注销任何对象?
这样可以吗?还是说我也需要在异步操作完成后注销?
附言:如链接的SO问题中Damian Edwards所建议的,我使用ThreadPool.QueueUserWorkItem
在请求范围之外发送电子邮件。