我应该永远不会调用HostingEnvironment.UnregisterObject吗?

在尝试在我的ASP.Net MVC 3应用程序中通过smtp实现异步电子邮件时,我遇到了阻止我的ASP.NET MVC请求线程的SO SmtpClient.SendAsync 。 在那里我找到了Phil Haack的文章: 在ASP.NET中实现重复背景任务的危险,它提供了一种避免在AppDomain关闭时崩溃后台线程的方法。

文章说要调用HostingEnvironment.RegisterObject(this); 在构造函数上并调用HostingEnvironment.UnregisterObject(this); 仅在调用IRegisteredObject.Stop方法时 。

在一般情况下,当请求永久到达,并且实现IRegisteredObject的对象的范围是请求时,这种方法是不是在每个请求中注册对象(利用电子邮件function)并且不注销任何?

可以吗? 或者我应该在异步操作完成后取消注册?

PS:正如Damian Edwards在链接的SO问题中所建议的,我使用ThreadPool.QueueUserWorkItem来发送超出请求范围的电子邮件。

我不确定requests arrive permanentlyrequests arrive permanently是什么意思, scope of the object ... is request等。

Request ScopepermanentThreadPool.QueueUserWorkItem ; 这些话在一起根本没有意义。 一个使用ThreadPool.QueueUserWorkItem以便请求不会永远。 Damian Edwards建议,当您的请求立即返回时,耗时的工作将在后台完成。

我已经使用IRegisterObject根据收到的请求发送批量电子邮件。 但是,就我而言,我使用了一个实现IRegisterObject的单例对象EmailSender 。 在这种情况下,它在构造函数中注册一次,在Stop()注册一次。

所以,简而言之,请使用单身人士 。