在我的 ASP.Net MVC 3 应用程序中尝试通过 smtp 实现异步电子邮件时,我遇到了SO SmtpClient.SendAsync 阻塞了我的 ASP.NET MVC 请求线程。在那里我找到了 Phil Haack 的文章:在 ASP.NET 中实现重复后台任务的危险,它提供了一种避免 AppDomain 关闭时后台线程崩溃的方法。
文章说要调用HostingEnvironment.RegisterObject(this);
构造函数,并且HostingEnvironment.UnregisterObject(this);
只有在调用IRegisteredObject.Stop 方法时才调用。
在一般情况下,当请求永久到达并且对象实现的范围IRegisteredObject
是请求时,这种方法不是在每个请求中注册对象(利用电子邮件功能)并且不会取消注册吗?
可以吗?或者我也应该在异步操作完成后取消注册?
PS:正如 Damian Edwards 在链接的 SO 问题中所建议的那样,我ThreadPool.QueueUserWorkItem
用来发送超出请求范围的电子邮件。