麦田

不积跬步无以至千里.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在 .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

posted on 2025-03-31 16:41  一些记录  阅读(49)  评论(0)    收藏  举报