当前位置:首页 > 科技  > 软件

.NET Core 中的定时任务实现

来源: 责编: 时间:2024-06-05 17:47:01 253观看
导读在.NET Core中,定时任务是一个常见的需求,它允许你在特定的时间间隔或指定的时间点执行某些操作。无论是执行定期的数据同步、发送定期报告,还是进行系统的定时维护,定时任务都扮演着至关重要的角色。本文将介绍在.NET Co

在.NET Core中,定时任务是一个常见的需求,它允许你在特定的时间间隔或指定的时间点执行某些操作。无论是执行定期的数据同步、发送定期报告,还是进行系统的定时维护,定时任务都扮演着至关重要的角色。本文将介绍在.NET Core中实现定时任务的几种方法。lXd28资讯网——每日最新资讯28at.com

lXd28资讯网——每日最新资讯28at.com

一、使用System.Threading.Timer

System.Threading.Timer是.NET Framework和.NET Core中都提供的一个简单的定时器类,它允许你指定一个回调函数和一个时间间隔,当定时器达到指定的时间间隔时,会调用这个回调函数。lXd28资讯网——每日最新资讯28at.com

using System;using System.Threading;public class TimerExample{    private static Timer _timer;    public static void Main()    {        // 创建一个定时器,每隔2秒触发一次        _timer = new Timer(TimerCallback, null, 0, 2000);        Console.WriteLine("按任意键退出...");        Console.ReadKey();    }    private static void TimerCallback(Object o)    {        // 每次定时器触发时执行的代码        Console.WriteLine("Timer triggered at {0}", DateTime.Now);    }}

二、使用System.Timers.Timer

System.Timers.Timer与System.Threading.Timer类似,但提供了更多的功能和事件。它可以在指定的时间间隔后触发Elapsed事件,你可以在该事件处理程序中执行定时任务。lXd28资讯网——每日最新资讯28at.com

using System;using System.Timers;public class TimerExample{    private static System.Timers.Timer _timer;    public static void Main()    {        // 创建一个定时器,设置间隔为2秒        _timer = new System.Timers.Timer(2000);        _timer.Elapsed += OnTimedEvent;        _timer.Enabled = true;        Console.WriteLine("按任意键退出...");        Console.ReadKey();    }    private static void OnTimedEvent(Object source, ElapsedEventArgs e)    {        // 每次定时器触发时执行的代码        Console.WriteLine("Timer triggered at {0}", e.SignalTime);    }}

三、使用Quartz.NET

Quartz.NET是一个开源的作业调度库,它允许你以更加灵活和强大的方式安排定时任务。Quartz.NET支持基于Cron表达式的复杂调度,并且可以持久化作业状态。lXd28资讯网——每日最新资讯28at.com

首先,你需要通过NuGet安装Quartz.NET包:lXd28资讯网——每日最新资讯28at.com

dotnet add package Quartz

然后,你可以创建一个作业类并实现IJob接口:lXd28资讯网——每日最新资讯28at.com

using Quartz;using System;public class HelloJob : IJob{    public Task Execute(IJobExecutionContext context)    {        Console.WriteLine("HelloJob is executing at " + DateTime.Now);        return Task.CompletedTask;    }}

接下来,配置和启动Quartz调度器:lXd28资讯网——每日最新资讯28at.com

using Quartz;using Quartz.Impl;using System;using System.Threading.Tasks;public class QuartzExample{    public static async Task Main(string[] args)    {        // 创建调度器工厂和调度器实例        StdSchedulerFactory factory = new StdSchedulerFactory();        IScheduler scheduler = await factory.GetScheduler();        await scheduler.Start();        // 创建一个作业细节并绑定到HelloJob类        IJobDetail job = JobBuilder.Create<HelloJob>()            .WithIdentity("job1", "group1")            .Build();        // 创建一个触发器,每5秒执行一次作业        ITrigger trigger = TriggerBuilder.Create()            .WithIdentity("trigger1", "group1")            .StartNow()            .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())            .Build();        // 将作业和触发器添加到调度器中        await scheduler.ScheduleJob(job, trigger);        Console.WriteLine("按任意键退出...");        Console.ReadKey();                // 停止调度器并等待所有作业完成        await scheduler.Shutdown(true);    }}

四、使用内置的IHostedService在ASP.NET Core中

在ASP.NET Core应用中,你可以使用IHostedService接口来创建后台任务,这些任务可以在应用启动时开始运行,并在应用关闭时优雅地停止。这对于执行定时任务非常有用。lXd28资讯网——每日最新资讯28at.com

using Microsoft.Extensions.Hosting;using System;using System.Threading;using System.Threading.Tasks;public class TimedHostedService : IHostedService, IDisposable{    private Timer _timer;    private readonly ILogger _logger;    public TimedHostedService(ILogger<TimedHostedService> logger)    {        _logger = logger;    }    public Task StartAsync(CancellationToken cancellationToken)    {        _timer = new Timer(DoWork, null, TimeSpan.Zero,             TimeSpan.FromSeconds(5)); // 设置时间间隔为5秒        return Task.CompletedTask;    }    private void DoWork(object state)    {        _logger.LogInformation("TimedHostedService running at: {time}", DateTimeOffset.Now);    }    public Task StopAsync(CancellationToken cancellationToken)    {        _timer?.Change(Timeout.Infinite, Timeout.Infinite);        return Task.CompletedTask;    }    public void Dispose()    {        _timer?.Dispose();    }}

在Startup.cs的ConfigureServices方法中注册该服务:lXd28资讯网——每日最新资讯28at.com

public void ConfigureServices(IServiceCollection services){    // ... 其他服务配置 ...    services.AddHostedService<TimedHostedService>(); // 注册TimedHostedService为后台服务}

结论

在.NET Core中实现定时任务有多种方法,从简单的System.Threading.Timer到功能强大的Quartz.NET库,再到ASP.NET Core中的IHostedService,你可以根据项目的具体需求选择合适的方法。定时任务能够帮助你自动化执行重复性的工作,从而提高应用程序的效率和可靠性。lXd28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92189-0.html.NET Core 中的定时任务实现

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 接口自动化测试做到什么程度的覆盖算是合格的

下一篇: 全面掌握Gorm中的迁移系统,实现自动迁移与手动迁移

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top