4

在我的 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用来发送超出请求范围的电子邮件。

4

1 回答 1

0

我不确定你的意思是什么requests arrive permanentlyscope of the object ... is request等等。

Request Scope, permanent, 和ThreadPool.QueueUserWorkItem; 这些话放在一起根本没有意义。一种用途ThreadPool.QueueUserWorkItem是使请求不会永远持续下去。正如 Damian Edwards 建议的那样,当您的请求立即返回时,这项耗时的工作在后台完成。

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

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

于 2013-07-24T22:48:13.797 回答