gpt4 book ai didi

c# - 我不应该调用 HostingEnvironment.UnregisterObject 吗?

转载 作者:行者123 更新时间:2023-11-30 13:02:08 25 4
gpt4 key购买 nike

在我的 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); 并调用 HostingEnvironment.UnregisterObject(this); 仅当 IRegisteredObject.Stop Method 时叫做。

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

可以吗?还是异步操作完成后我也应该注销?

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

最佳答案

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

请求范围永久ThreadPool.QueueUserWorkItem;这些话放在一起一点意义都没有。一种是使用 ThreadPool.QueueUserWorkItem,这样请求就不会永远持续下去。耗时的工作在后台完成,而您的请求会像 Damian Edwards 所建议的那样立即返回。

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

所以,简而言之,请使用 singleton .

关于c# - 我不应该调用 HostingEnvironment.UnregisterObject 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com