首页 > 解决方案 > BackgroundService 可以在 ASP .NET Core 3.1 中无限期运行吗?

问题描述

我正在构建一个接收数据并定期更新的网络服务。当用户 ping 服务时,它会将特定数据发送回用户。为了接收这些数据,我有一个在启动时创建并定期接收更新的持久化,但不是定期接收更新。我已经实现了它,但我想添加 DI 并使其成为服务。这种类型的问题可以通过 BackgroundService 解决还是不推荐?有什么更好的我应该使用的吗?我最初只想将我的连接对象注册为单例,但由于单例在启动时未初始化,所以这对我来说效果不佳。

标签: asp.net-core

解决方案


我想我会添加一个答案,以便扩展我的评论。根据您的描述,创建一个BackgroundService可能是您想要做的最佳解决方案。

ASP.NET Core 提供了一个IHostedService接口,可用于在您的 Web 应用程序中实现后台任务或服务。它们还提供了一个BackgroundService实现IHostedService并提供用于实现长时间运行的后台服务的基类的类。这些后台服务在 Program.cs 的 CreateWebHostBuilder 方法中注册。

您可以使用依赖注入容器中的服务,但在使用它们时必须正确管理它们的范围。您可以决定如何管理您的BackgroundService课程以满足您的需求。它确实需要了解如何使用Task对象以及如何执行、排队、监控它们等。所以我建议彻底阅读文档,这样你就不会最终影响性能或资源使用。

我也倾向于使用 Autofac 作为我的 DI 容器,而不是内置的 Microsoft 容器,因为 Autofac 提供了更多用于解析服务和管理范围的功能。因此,如果您发现自己因为内置容器而撞墙,那么值得考虑。

这是 docs 部分的链接,更深入地介绍了这一点。我相信您现在也可以创建独立的服务工作者,因此根据用例可能值得一看。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio

编辑:这是另一个指向微服务后台服务示例实现指南的链接。它对一些细节进行了更深入的介绍。

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice#implementing-ihostedservice-with-a-custom-hosted-服务类从后台派生服务基类


推荐阅读