Asp.net core ASP.NET核心应用程序中的后台服务
我使用ASP.NET Core 2.1构建了一个API,它可以执行一些基本的CRUD操作 这是一种发布管道应用程序,专门用于我们的内部流程。其工作原理如下:Asp.net core ASP.NET核心应用程序中的后台服务,asp.net-core,asp.net-core-hosted-services,Asp.net Core,Asp.net Core Hosted Services,我使用ASP.NET Core 2.1构建了一个API,它可以执行一些基本的CRUD操作 这是一种发布管道应用程序,专门用于我们的内部流程。其工作原理如下: 用户请求重新加载数据(POST) 用户批准数据重新加载(POST) 用户启动数据库中的SSIS包,该包将触发数据重新加载(POST) 后台进程检查该SSIS包的状态,并在完成时将重新加载的状态设置为“完成/失败” 我们最初的想法是创建一个后台服务,定期查询数据库并检查SSIS包的当前状态,然后将实体更新到所需状态(完成/失败) 但是,这不起
为了维护实体的正确状态,运行后台服务的替代方案是什么?一个单独的项目?我最近在API中创建了一个后台服务,下面的解决方案适合我:
private readonly IServiceProvider _serviceProvider;
public MyBackgoundService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while(!stoppingToken.IsCancellationRequested){
using var scope = _serviceProvider.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();
}
}
受保护的覆盖异步任务ExecuteAsync(CancellationToken stoppingToken)
{
同时(!stoppingToken.IsCancellationRequested){
使用var scope=_serviceProvider.CreateScope();
var context=scope.ServiceProvider.GetRequiredService();
}
}
后台服务是托管服务,托管服务可以注入
IServiceProvider
。因此,您可以创建一个新的作用域,在其中您可以安全地引用一个新的作用域服务。请使用IServiceScopeFactory而不是IServiceProvider。@alsami如果您觉得有必要将一篇文章标记为之前已回答的文章,并在评论中说明,那么至少您最好在之前讨论过的问题的地方发布一个链接。目前,这篇文章是“asp.net核心后台服务”的第一次堆栈溢出搜索,鉴于此,您的评论看起来有点矛盾,没有帮助。对于那些提出此问题的人,请阅读以下有趣的文章。