CRON 服务功能的最佳方式

Best way to CRON a service function

我们有 .net 6 worker 服务。

在此 worker 中有一个注入的作用域 dbcontext 以及一个使用此上下文的注入服务。

服务看起来像这样:

Publc ServiceConstructor(Mycontext context)
{
    _dbContext = context;  <---- scoped injected db
}

Public async Task DoWork()
{
    //Do Work
}

启动有:

services.AddScoped<Mycontext>();
services.AddScoped<Myservice>()

并且在我的工人的 ExcecuteAsync()

using(var scope = _serviceProvider.CreateScope()){

   //get service here using getrequiredservice
}

我面临的问题是我需要使用 cron 安排 doWork。但也要记住,将添加第二个和第三个服务,其中两个将 运行 同时 运行 而第三个在不同的时间。不过三个都应该很容易设置新的时间。

是否有一种简单的方法来单独安排所有 3 个服务功能?

所有 3 个将使用相同的数据库。

这有点取决于您的型号;但总的来说:DbContext 应该是短暂的。

含义: 您不会在服务的生命周期内处理 DbContext 的同一个实例,而是:您必须请求一个新实例,最好是在函数执行时从框架中请求。

这与处理 HTTP 请求时的工作方式类似。根据请求,您将拥有“自己的”DbContext。可以找到一个关于连接池如何在这种情况下工作的有趣问题 here, and an general article on how to retrieve the DbContext can be found

总结一下:如果服务长期存在:不要像您那样将其注入构造函数,而是在每次 CRON 执行时解析它,这将在 ExcecuteAsync 中通过作用域服务提供商。

我需要更多代码才能更具体。至于现在,您似乎已经具备了所有的构建基块,应该能够找到解决方案。如果您还有其他问题,请告诉我。