日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

.NET Core 中的定時(shí)任務(wù)實(shí)現(xiàn)

來(lái)源: 責(zé)編: 時(shí)間:2024-06-05 17:47:01 143觀看
導(dǎo)讀在.NET Core中,定時(shí)任務(wù)是一個(gè)常見(jiàn)的需求,它允許你在特定的時(shí)間間隔或指定的時(shí)間點(diǎn)執(zhí)行某些操作。無(wú)論是執(zhí)行定期的數(shù)據(jù)同步、發(fā)送定期報(bào)告,還是進(jìn)行系統(tǒng)的定時(shí)維護(hù),定時(shí)任務(wù)都扮演著至關(guān)重要的角色。本文將介紹在.NET Co

在.NET Core中,定時(shí)任務(wù)是一個(gè)常見(jiàn)的需求,它允許你在特定的時(shí)間間隔或指定的時(shí)間點(diǎn)執(zhí)行某些操作。無(wú)論是執(zhí)行定期的數(shù)據(jù)同步、發(fā)送定期報(bào)告,還是進(jìn)行系統(tǒng)的定時(shí)維護(hù),定時(shí)任務(wù)都扮演著至關(guān)重要的角色。本文將介紹在.NET Core中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方法。9cP28資訊網(wǎng)——每日最新資訊28at.com

9cP28資訊網(wǎng)——每日最新資訊28at.com

一、使用System.Threading.Timer

System.Threading.Timer是.NET Framework和.NET Core中都提供的一個(gè)簡(jiǎn)單的定時(shí)器類,它允許你指定一個(gè)回調(diào)函數(shù)和一個(gè)時(shí)間間隔,當(dāng)定時(shí)器達(dá)到指定的時(shí)間間隔時(shí),會(huì)調(diào)用這個(gè)回調(diào)函數(shù)。9cP28資訊網(wǎng)——每日最新資訊28at.com

using System;using System.Threading;public class TimerExample{    private static Timer _timer;    public static void Main()    {        // 創(chuàng)建一個(gè)定時(shí)器,每隔2秒觸發(fā)一次        _timer = new Timer(TimerCallback, null, 0, 2000);        Console.WriteLine("按任意鍵退出...");        Console.ReadKey();    }    private static void TimerCallback(Object o)    {        // 每次定時(shí)器觸發(fā)時(shí)執(zhí)行的代碼        Console.WriteLine("Timer triggered at {0}", DateTime.Now);    }}

二、使用System.Timers.Timer

System.Timers.Timer與System.Threading.Timer類似,但提供了更多的功能和事件。它可以在指定的時(shí)間間隔后觸發(fā)Elapsed事件,你可以在該事件處理程序中執(zhí)行定時(shí)任務(wù)。9cP28資訊網(wǎng)——每日最新資訊28at.com

using System;using System.Timers;public class TimerExample{    private static System.Timers.Timer _timer;    public static void Main()    {        // 創(chuàng)建一個(gè)定時(shí)器,設(shè)置間隔為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)    {        // 每次定時(shí)器觸發(fā)時(shí)執(zhí)行的代碼        Console.WriteLine("Timer triggered at {0}", e.SignalTime);    }}

三、使用Quartz.NET

Quartz.NET是一個(gè)開(kāi)源的作業(yè)調(diào)度庫(kù),它允許你以更加靈活和強(qiáng)大的方式安排定時(shí)任務(wù)。Quartz.NET支持基于Cron表達(dá)式的復(fù)雜調(diào)度,并且可以持久化作業(yè)狀態(tài)。9cP28資訊網(wǎng)——每日最新資訊28at.com

首先,你需要通過(guò)NuGet安裝Quartz.NET包:9cP28資訊網(wǎng)——每日最新資訊28at.com

dotnet add package Quartz

然后,你可以創(chuàng)建一個(gè)作業(yè)類并實(shí)現(xiàn)IJob接口:9cP28資訊網(wǎng)——每日最新資訊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;    }}

接下來(lái),配置和啟動(dòng)Quartz調(diào)度器:9cP28資訊網(wǎng)——每日最新資訊28at.com

using Quartz;using Quartz.Impl;using System;using System.Threading.Tasks;public class QuartzExample{    public static async Task Main(string[] args)    {        // 創(chuàng)建調(diào)度器工廠和調(diào)度器實(shí)例        StdSchedulerFactory factory = new StdSchedulerFactory();        IScheduler scheduler = await factory.GetScheduler();        await scheduler.Start();        // 創(chuàng)建一個(gè)作業(yè)細(xì)節(jié)并綁定到HelloJob類        IJobDetail job = JobBuilder.Create<HelloJob>()            .WithIdentity("job1", "group1")            .Build();        // 創(chuàng)建一個(gè)觸發(fā)器,每5秒執(zhí)行一次作業(yè)        ITrigger trigger = TriggerBuilder.Create()            .WithIdentity("trigger1", "group1")            .StartNow()            .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())            .Build();        // 將作業(yè)和觸發(fā)器添加到調(diào)度器中        await scheduler.ScheduleJob(job, trigger);        Console.WriteLine("按任意鍵退出...");        Console.ReadKey();                // 停止調(diào)度器并等待所有作業(yè)完成        await scheduler.Shutdown(true);    }}

四、使用內(nèi)置的IHostedService在ASP.NET Core中

在ASP.NET Core應(yīng)用中,你可以使用IHostedService接口來(lái)創(chuàng)建后臺(tái)任務(wù),這些任務(wù)可以在應(yīng)用啟動(dòng)時(shí)開(kāi)始運(yùn)行,并在應(yīng)用關(guān)閉時(shí)優(yōu)雅地停止。這對(duì)于執(zhí)行定時(shí)任務(wù)非常有用。9cP28資訊網(wǎng)——每日最新資訊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)); // 設(shè)置時(shí)間間隔為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方法中注冊(cè)該服務(wù):9cP28資訊網(wǎng)——每日最新資訊28at.com

public void ConfigureServices(IServiceCollection services){    // ... 其他服務(wù)配置 ...    services.AddHostedService<TimedHostedService>(); // 注冊(cè)TimedHostedService為后臺(tái)服務(wù)}

結(jié)論

在.NET Core中實(shí)現(xiàn)定時(shí)任務(wù)有多種方法,從簡(jiǎn)單的System.Threading.Timer到功能強(qiáng)大的Quartz.NET庫(kù),再到ASP.NET Core中的IHostedService,你可以根據(jù)項(xiàng)目的具體需求選擇合適的方法。定時(shí)任務(wù)能夠幫助你自動(dòng)化執(zhí)行重復(fù)性的工作,從而提高應(yīng)用程序的效率和可靠性。9cP28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-92189-0.html.NET Core 中的定時(shí)任務(wù)實(shí)現(xiàn)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 接口自動(dòng)化測(cè)試做到什么程度的覆蓋算是合格的

下一篇: 全面掌握Gorm中的遷移系統(tǒng),實(shí)現(xiàn)自動(dòng)遷移與手動(dòng)遷移

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro真機(jī)揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過(guò)了幾波預(yù)熱之后,一加Ace2 Pro的外觀真機(jī)圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計(jì)還是延續(xù)了一加11的方案,只是細(xì)節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 三言兩語(yǔ)說(shuō)透設(shè)計(jì)模式的藝術(shù)-簡(jiǎn)單工廠模式

    一、寫在前面工廠模式是最常見(jiàn)的一種創(chuàng)建型設(shè)計(jì)模式,通常說(shuō)的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡(jiǎn)單工廠模式又稱為靜態(tài)工廠方法模式,不屬于GoF 23種設(shè)計(jì)
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過(guò)某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 如何通過(guò)Python線程池實(shí)現(xiàn)異步編程?

    線程池的概念和基本原理線程池是一種并發(fā)處理機(jī)制,它可以在程序啟動(dòng)時(shí)創(chuàng)建一組線程,并將它們置于等待任務(wù)的狀態(tài)。當(dāng)任務(wù)到達(dá)時(shí),線程池中的某個(gè)線程會(huì)被喚醒并執(zhí)行任務(wù),執(zhí)行完任
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對(duì)帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡(jiǎn)單而
  • 拼多多APP上線本地生活入口,群雄逐鹿萬(wàn)億市場(chǎng)

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨(dú)家獲悉,拼多多在其APP內(nèi)上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁(yè)的&ldquo;充值中心&rdquo;內(nèi),目前主要售賣美食相關(guān)的
  • 消息稱小米汽車開(kāi)始篩選交付中心:需至少120個(gè)車位

    IT之家 7 月 7 日消息,日前,有微博簡(jiǎn)介為“汽車行業(yè)從業(yè)者、長(zhǎng)三角一體化擁護(hù)者”的微博用戶 @長(zhǎng)三角行健者 發(fā)文表示,據(jù)經(jīng)銷商集團(tuán)反饋,小米汽車目前
  • 3699元!iQOO Neo8 Pro頂配版今日首銷:1TB UFS 4.0同價(jià)位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro兩個(gè)版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更是首發(fā)搭載了聯(lián)發(fā)科天璣9200+旗艦
  • 上海舉辦人工智能大會(huì)活動(dòng),建設(shè)人工智能新高地

    人工智能大會(huì)在上海浦江兩岸隆重拉開(kāi)帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會(huì)的特色活動(dòng)之一的上海人工智能發(fā)展盛典人工
Top 主站蜘蛛池模板: 永宁县| 呼玛县| 栖霞市| 罗平县| 会理县| 民权县| 江门市| 霍山县| 昌图县| 高尔夫| 武山县| 常宁市| 永城市| 新营市| 明水县| 新余市| 钟山县| 河西区| 平阳县| 南阳市| 满城县| 鄱阳县| 西昌市| 通渭县| 通州区| 孝义市| 藁城市| 黎城县| 榆树市| 平顺县| 林甸县| 都安| 元江| 大姚县| 揭东县| 莲花县| 旬阳县| 阳江市| 通州市| 洛隆县| 健康|