Service 如何在net core 3.1中设置windows服务的开始和结束时间以及暂停
我在NetCore3.1中有一个worker服务,我必须每天执行一次,时间范围为小时。 我还有另一个参数,它告诉我服务应该何时停止运行或恢复 我实现了一个示例,但我不知道这是否是最有效的方法 我的例子是: Program.csService 如何在net core 3.1中设置windows服务的开始和结束时间以及暂停,service,task,jobs,worker,Service,Task,Jobs,Worker,我在NetCore3.1中有一个worker服务,我必须每天执行一次,时间范围为小时。 我还有另一个参数,它告诉我服务应该何时停止运行或恢复 我实现了一个示例,但我不知道这是否是最有效的方法 我的例子是: Program.cs public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(loggerFactory => loggerFactory.AddEventLog())
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(loggerFactory=>loggerFactory.AddEventLog())
.UseWindowsService()
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
});
}
工薪阶层
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//get range of hours for execute
var timeExe = await new repository().GetExecutionTimeParameter();
while (!stoppingToken.IsCancellationRequested)
{
//while it is running I ask if it should continue or not
var stop = await new repository().MustStop();
//if stop, i call stopAsync override methos, but this execute loop
if (stop)
{
await StopAsync(stoppingToken);
}
else
{
//get current date
var currentDate = DateTime.Now;
if (currentDate.Hour >= timeExe.initHour && currentDate.Hour <= timeExe.finalHour)
{
_logger.LogInformation("Run service!!!");
//Business code
await Task.Delay(3000, stoppingToken);
}
}
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Stopping");
await Task.CompletedTask;
}
public override async Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Start");
await base.StartAsync(cancellationToken);
}
受保护的覆盖异步任务ExecuteAsync(CancellationToken stoppingToken)
{
//获取执行的小时范围
var timeExe=wait new repository().GetExecutionTimeParameter();
同时(!stoppingToken.IsCancellationRequested)
{
//当它运行时,我问它是否应该继续
var stop=wait new repository().MustStop();
//如果停止,我调用stopAsync重写方法,但是这个执行循环
如果(停止)
{
等待StopAsync(stoppingToken);
}
其他的
{
//获取当前日期
var currentDate=DateTime.Now;
如果(currentDate.Hour>=timeExe.initHour&¤tDate.Hour