ASP.NET Core计划程序在完成任务之前关闭
创始人
2024-09-15 21:30:11
0

在ASP.NET Core中,可以通过在应用程序的主机中添加一个IHostedService来实现在完成任务之前关闭计划程序。以下是一个示例代码:

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

public class ScheduledTask : IHostedService, IDisposable
{
    private readonly ILogger _logger;
    private Timer _timer;

    public ScheduledTask(ILogger logger)
    {
        _logger = logger;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("ScheduledTask is starting.");

        // 设置计划执行任务的时间间隔
        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));

        return Task.CompletedTask;
    }

    private void DoWork(object state)
    {
        _logger.LogInformation("ScheduledTask is working.");
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("ScheduledTask is stopping.");

        // 停止计划执行任务
        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

然后在应用程序的主机中注册ScheduledTask服务:

public class Program
{
    public static async Task Main(string[] args)
    {
        var hostBuilder = new HostBuilder()
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole();
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService();
            });

        await hostBuilder.RunConsoleAsync();
    }
}

上述代码中,ScheduledTask类实现了IHostedService接口,该接口定义了在应用程序的启动和关闭过程中要执行的任务。在StartAsync方法中,我们使用Timer类来设置计划执行任务的时间间隔,并在DoWork方法中定义实际要执行的任务。在StopAsync方法中,我们停止计划执行任务。在Dispose方法中,我们释放Timer对象。

在应用程序的主机中,我们使用HostBuilder来构建主机,并通过调用ConfigureServices方法注册ScheduledTask服务。然后调用RunConsoleAsync方法来运行主机。

当应用程序关闭时,StopAsync方法会被调用,从而停止计划执行任务。

相关内容

热门资讯

第四分钟实锤!德州之星辅助(德... 第四分钟实锤!德州之星辅助(德州wepower)本来真的是有挂(详细辅助普及教程)1、不需要AI权限...
第四分钟实锤!德州之星插件(德... 第四分钟实锤!德州之星插件(德州俱乐部)确实有挂(详细辅助AA德州教程);1、这是跨平台的德州之星插...
第七分钟实锤!德州之星外挂(德... 第七分钟实锤!德州之星外挂(德州wepower)原来有挂(详细辅助2025新版总结);德州之星外挂软...
三分钟实锤!德扑之星ai代打(... 三分钟实锤!德扑之星ai代打(德州俱乐部)一贯真的有挂(详细辅助2025新版技巧)1、在德扑之星ai...
第五分钟实锤!德州免费辅助神器... 第五分钟实锤!德州免费辅助神器app(德州wpk)都是有挂(详细辅助细节方法)1、每一步都需要思考,...
三分钟实锤!德扑之星作弊(德扑... 三分钟实锤!德扑之星作弊(德扑)果然有挂(详细辅助微扑克教程)1)德扑之星作弊辅助挂:进一步探索德扑...
6分钟实锤!德州免费辅助神器a... 6分钟实锤!德州免费辅助神器app(来玩德州app)一直是有挂(详细辅助透明挂教程)暗藏猫腻,小编详...
三分钟实锤!德州之星辅助(德州... 三分钟实锤!德州之星辅助(德州wpk)都是真的是有挂(详细辅助细节方法)进入游戏-大厅左侧-新手福利...
7分钟实锤!智星德州菠萝外挂(... 7分钟实锤!智星德州菠萝外挂(德扑ai)好像存在有挂(详细辅助攻略教程)1、在智星德州菠萝外挂ai机...
第七分钟实锤!德州ai人工智能... 第七分钟实锤!德州ai人工智能(wpk德州)切实真的是有挂(详细辅助专业教程);1、德州ai人工智能...