我应该永远不要调用HostingEnvironment.UnregisterObject

本文关键字:HostingEnvironment UnregisterObject 调用 永远 我应该 | 更新日期: 2023-09-27 18:10:02

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

文章说在构造函数上调用HostingEnvironment.RegisterObject(this);,并且只在IRegisteredObject时调用HostingEnvironment.UnregisterObject(this);。方法被调用。

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

可以吗?还是应该在异步操作完成后取消注册?

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

我应该永远不要调用HostingEnvironment.UnregisterObject

我不知道你说的requests arrive permanently, scope of the object ... is request等是什么意思

Request Scope, permanent, and ThreadPool.QueueUserWorkItem;这些词放在一起根本没有意义。一个人使用ThreadPool.QueueUserWorkItem,这样请求就不会永远持续下去。这个耗时的工作是在后台完成的,而你的请求会像达米安·爱德华兹建议的那样立即返回。

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

所以,简而言之,请使用单例。

相关文章:
  • 没有找到相关文章