谁能解释是否可以在 asp.net 中使用 Backgroundworker?如果这是一个坏主意,那为什么?
2 回答
总的来说没有好坏之分,这完全取决于您将如何使用它,如果您考虑任何预期的未来问题,我发现这篇文章和里面的链接非常好 http://www.hanselman.com/博客/HowToRunBackgroundTasksInASPNET.aspx
几年前,Phil Haack 写了一篇关于 ASP.NET 中重复执行后台任务的危险的精彩文章。在其中,他指出了一些当人们试图在后台工作时很常见的陷阱。阅读它,但这是他帖子的摘要。
与请求无关的线程中未处理的异常将取消该进程。如果您在 Web Farm 中运行您的站点,您最终可能会得到多个应用程序实例,它们都尝试同时运行相同的任务。您的站点运行的 AppDomain 可能由于多种原因而关闭,并使用它取消您的后台任务。如果您认为您可以自己编写后台任务,那么您很可能会弄错。我不是在指责你的技能,我只是说它很微妙。另外,为什么你必须这样做?
有很多很棒的方法可以让你在后台做事,还有很多可用的库和选择。
一些 ASP.NET 应用程序将托管在数据中心的 IIS 中,而其他应用程序将托管在 Azure 云中。在我看来,使用范围大致是这样的:
常规:Hangfire(或类似的类似开源库),用于在您的 ASP.NET 网站中编写后台任务 云:Azure WebJobs 一个正式的 Azure 功能,用于卸载在您的网站之外运行的后台任务并扩展工作负载 高级:Azure Worker Role在云服务中独立于您的网站扩展后台处理工作负载,并且您需要控制机器有很多关于如何使用 Azure WebJobs 的精彩文章和视频,以及很多关于可扩展 Azure 云服务中的工作角色如何工作的文档,但是没有太多关于您托管的 ASP.NET 应用程序如何轻松拥有后台服务的信息。这里有几个。