这个方法主要是用于项目直接启动后做一下定时任务,则可以直接在Host宿主中注入你的定时执行类,项目启动后他会默认执行定时任务
Host中可以包含多个IHostedService服务实例。当然,如果是Web应用其中一个就是WebHost。Host起来之后,会依次启动所有添加的这些IHostedService服务
Worker就是我们自己定义的一个服务程序。整个系统运行起来后,它会自动调用Worker.StartAsync()方法
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).ConfigureServices((hostContext, services) =>
{
//注意这里
services.AddHostedService<Worker>();
});
/// <summary>
/// 注意需要继承IHostedService
/// </summary>
public class Worker : IHostedService, IDisposable
{
private Timer _timer;
public static int a = 0;
public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer(dowork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(2));//频率两分钟一次
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void dowork(object state)
{
exec();
}
/// <summary>
/// 执行代码块
/// </summary>
public void exec()
{
a++;
Console.WriteLine("第{0}次执行", a);
}
public void Dispose()
{
_timer?.Dispose();
}
}
}
实现效果
![]()
小注释
同样也可以使用继承BackgroundService来代替IHostedService 同样的效果 就直接继承BackgroundService就好 就不需要同时继承IHostedService和IDisposable
![]()
------------------------------------------------------------------------
![]()