问题描述
我正在尝试使用 Blazor 服务器编写客户订单跟踪器。
我想做的是在后台为每个创建的新订单启动一个订单管理服务。该服务会跟踪与订单相关的各种实时信息,并应在订单完成时对其进行处理。
我可以通过将服务注册为:
services.AddTransient();
然后我可以将其依赖注入到 razor 组件中:
@inject OrderManagementService om_service
这会为每个订单创建一个新实例,这很好。问题是我不能期望用户保持页面打开以保持瞬态服务的范围处于活动状态。
根据我的观察,实例继续运行,但它的生命周期没有明确定义。它可能会很快无限期地终止(不足以完成工作),或者无限期地运行(从而抢夺服务器的资源)。因为我没有提到它。
谢谢!
解决方法
看看 .NET Core 中的 hosted background services,听起来它对你有用。
即使用户离开您的网站,托管后台服务也会继续在您的服务器上运行。您可以拥有一个 OrderManager
托管服务,用于在整个流程中指导每个订单并在数据库中保持订单状态更新、通过电子邮件向用户发送状态更新或将更改推送到前端。