【发布时间】:2020-02-13 05:58:50
【问题描述】:
我想每天在午夜运行后台服务。 .NET Core 默认的 BackgroundService 在task.delay 上运行,我想每半夜(24 小时间隔)运行一次。
我在每个 task.Delay 间隔而不是指定的特定时间运行 BackgroundService 的问题。
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);
}
}
}
【问题讨论】:
-
不要——让它成为一个标准的控制台应用程序并通过你的平台调度程序运行它(例如 Linux 的 crontab)。较低的复杂性将是您以后感谢自己的事情。
-
你打算在什么操作系统上安排这个?
-
也许这对你有帮助? stackoverflow.com/questions/58535975/…
-
@Clint 我在 Windows 上运行它
-
为什么不在 Windows 任务计划程序上安排它,并安排在特定的
DateTimex间隔执行?
标签: c# .net asp.net-core