用户云卷云舒 发表于 2024-6-24 02:44:48

ASP.NET Core 增长背景定时托管任务

项目:ASP.NET Core MVC 7.0
简述:
主要创建一个继承BackgroundService类的对象,配合一个定时器,在主程序启动后在背景运行。
1、在项目中创建执行任务的类文件,继承 BackgroundService
public class TestTask : BackgroundService
{
    private Timer? _timer;   //定时器

    /// <summary>
    /// 启动后台托管
    /// </summary>
    /// <param name="stoppingToken"></param>
    /// <returns></returns>
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
         //通过定时器执行具体任务的方法,并设置周期时间
      _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
      return Task.CompletedTask;
    }

    /// <summary>
    /// 执行任务,具体的内容
    /// </summary>
    /// <param name="state"></param>
    private void DoWork(object state)
    {
      //在控制台显示时间
      Console.Clear();
      Console.WriteLine("继续执行:" + DateTime.Now.ToLongTimeString());
      
      //满足某个条件,自销毁后台任务
      if (DateTime.Now.Minute>21)
      {
            Console.WriteLine("最后执行:" + DateTime.Now.ToShortTimeString());
            
            Dispose(); //消耗动作。然后不再执行
      }   
    }

    /// <summary>
    /// 销毁,释放资源
    /// </summary>
    public override void Dispose()
    {
      _timer?.Dispose();//如果_timer对象不为null,则销毁

      base.Dispose();
    }

} 2、在项目启动文件注册任务类 (Program.cs)
//......其他注册
builder.Services.AddHttpContextAccessor();
builder.Services.AddRazorPages();

//这一行就是注册后台任务
builder.Services.AddHostedService<TestTask>();

var app = builder.Build();
//......其他注册

app.Run();

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ASP.NET Core 增长背景定时托管任务