我希望能够在 ASP.NET Core 2.2 中启动即发即弃的工作。我尝试了以下方法:
services.AddHostedService<TestHostedService>();
public class TestHostedService : BackgroundService
{
private readonly ILogger _logger;
public TestHostedService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<TestHostedService>();
}
public IBackgroundTaskQueue TaskQueue { get; }
protected async override Task ExecuteAsync(
CancellationToken cancellationToken)
{
_logger.LogInformation("TestHostedService is starting.");
_logger.LogInformation("TestHostedService is stopping.");
}
}
但是,这会自动启动,我希望能够按需启动它,类似于 Hangfire 允许的方式:
BackgroundJob.Enqueue<TestJob>(x => x.DoWork());
这也允许作业自然地使用 ASP.NET CORE DI。
问题:如何按需启动 ASP.NET Core BackgroundService?
###背景信息
我正在处理一个需要即发即弃各种方法的应用程序。已经写好的代码是这样的:
Task.Run(() => RunSomething(_serviceScopeFactory));
这意味着每个方法都必须明确地处理获取范围和检索非常丑陋的依赖关系。