我希望每天午夜运行后台服务。.NET核心默认BackgroundService运行在task.delay
上,我希望每天午夜运行此服务(24小时间隔)。
我遇到的问题是BackgroundService每隔task.Delay
间隔运行一次,而不是指定特定时间。
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IServiceScopeFactory _serviceScopeFactory;
public Worker(ILogger<Worker> logger, IServiceScopeFactory serviceScopeFactory)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_serviceScopeFactory = serviceScopeFactory ?? throw new ArgumentNullException(nameof(serviceScopeFactory));
}
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
// We ultimately resolve the actual services we use from the scope we create below.
// This ensures that all services that were registered with services.AddScoped<T>()
// will be disposed at the end of the service scope (the current iteration).
using var scope = _serviceScopeFactory.CreateScope();
var configuration = scope.ServiceProvider.GetRequiredService<IWorkFlowScheduleService>();
configuration.DailySchedule(dateTime: DateTime.Now);
_logger.LogInformation($"Sending message to ");
await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken);
}
}
}
4条答案
按热度按时间dojqjjoe1#
这是我的解决方案。
jyztefdp2#
放入一个初始的
Task.Delay
,等待到午夜,做任何你需要做的事情,然后Task.Delay
24小时,怎么样?mcdcgff03#
我使用NCrontab 3.3.1
https://www.nuget.org/packages/ncrontab/
这样,您就可以使用cron;否则,我会同意前面的一个评论,即创建一个控制台应用程序,并将其作为cron或服务直接在服务器上运行。
下面是我如何实现NCrontab的一个示例。
那么在你的程序里. cs包括这个
希望这有帮助!
piztneat4#
您可以使用Quartz.NET库提供后台服务。