在 .NET 6 中,你可以使用 System.Threading.Timer 类来实现定时任务。以下是一个示例代码,它每十秒钟从数据库查询数据:
创建一个后台任务服务
public class AutoServices : BackgroundService { private Timer _timer; private readonly IServiceScopeFactory _serviceScopeFactory; public AutoServices(IServiceScopeFactory serviceScopeFactory) { _serviceScopeFactory = serviceScopeFactory; } /// <summary> /// 定时服务 /// </summary> /// <param name="stoppingToken"></param> /// <returns></returns> protected override async Task ExecuteAsync(CancellationToken stoppingToken) { Console.WriteLine("MyBackgroundService正在启动"); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1)); await Task.CompletedTask; } /// <summary> /// 要调用的方法 /// </summary> /// <param name="state"></param> private async void DoWork(object state) { using (var scope = _serviceScopeFactory.CreateScope()) { //这里查询数据库 var dbContext = scope.ServiceProvider.GetService<MyDbContext>(); //这里处理查询结果 var data = dbContext.Students.Where(s => s.Name == "111").ToList(); if (data.Count > 0) { foreach (var item in data) { Console.WriteLine(item.Name); string names = item.Name; item.Name = "已修改"; dbContext.Students.Update(item); int n = await dbContext.SaveChangesAsync(); if (n < 0) { Console.WriteLine($"{names}修改失败"); } Console.WriteLine($"{names}成功修改为{item.Name}"); } } Console.WriteLine("MyBackgroundService工作正常。"); Console.WriteLine("暂无数据"); } } //这个没用 public override async Task StopAsync(CancellationToken stoppingToken) { Console.WriteLine("MyBackgroundService正在停止。"); _timer?.Change(Timeout.Infinite, 0); await Task.CompletedTask; } }
在Programs.cs 里注册后台任务服务
(只要项目启动,这个任务就会一直运行,不会停下来)
//注册后台定时服务 builder.Services.AddHostedService<AutoServices>();
给大家看运行效果
这里查到了111的名称并做了修改
那...就分享到这里咯
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_61325957/article/details/130528469

浙公网安备 33010602011771号