【愚公系列】2022年12月 .NET CORE工具案例-IHostedService实现任务调度
【摘要】 前言 1.IHostedService是什么IHostedService 接口为主机托管的对象定义了两种方法:StartAsync(CancellationToken):应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。StopAsync(CancellationToken):在主机执行正常关闭时触发。 StopAsync 包含结束后台任...
前言
1.IHostedService是什么
IHostedService 接口为主机托管的对象定义了两种方法:
- StartAsync(CancellationToken):应仅限于短期任务,因为托管服务是按顺序运行的,在 StartAsync 运行完成之前不会启动其他服务。
- StopAsync(CancellationToken):在主机执行正常关闭时触发。 StopAsync 包含结束后台任务的逻辑。 实现 IDisposable 和终结器(析构函数)以处置任何非托管资源。
注意:如果应用意外关闭(例如,应用的进程失败),则可能不会调用 StopAsync。 因此,在 StopAsync 中执行的任何方法或操作都可能不会发生。
一、IHostedService实现任务调度
1.新建任务调度类
public class TestHostedService : IHostedService, IDisposable
{
private Timer? _timer;
public Task StartAsync(CancellationToken cancellationToken)
{
//相当于前端的setInterval定时执行,所以每过1秒都会执行一次
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
return Task.CompletedTask;
}
private void DoWork(object? state)
{
Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("StopAsync");
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
2.注册任务调度类
//添加主机服务
builder.Services.AddHostedService<TestHostedService>();
3.启动程序
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)