Service 如何在net core 3.1中设置windows服务的开始和结束时间以及暂停

Service 如何在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

我在NetCore3.1中有一个worker服务,我必须每天执行一次,时间范围为小时。 我还有另一个参数,它告诉我服务应该何时停止运行或恢复

我实现了一个示例,但我不知道这是否是最有效的方法

我的例子是:

Program.cs

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