从NET Core中的REST调用启动BackgroundService ExecuteAsync方法



我已经按照Microsoft文档实现了一个NET Core BackgroundService。它的方法ExecuteAsync在程序启动时运行,并且运行良好。

然而,我如何不仅从程序开始,而且通过REST调用来执行后台作业(位于BackgroundService接口的ExecuteAsync方法中(?

如果我理解您想要实现的目标,就不可能直接在BackgroundService中插入"worker"作业。但是,您可以在队列(队列或数据库或其他(中安排作业,或者使用事件消息系统供后台工作人员使用。

如果我正确理解你的问题,你可以这样做:

public class Controller
{
private readonly IServiceProvider _serviceProdiver;
public Controller(IServiceProvider serviceProdiver)
{
_serviceProvider = serviceProvider;
}
public async Task RunAllBackgroundServices()
{
var allBackgroundServices = _serviceProvider.GetServices<IHostedService>();
foreach(var hostedService in allBackgroundServices)
{
await hostedService.StartAsync(CancellationToken.None);
}
}
}

使用DI,您将获取IHostedService的所有实现并运行它们。

最新更新