網站首頁 編程語言 正文
一、定時任務調度的方法或者組件:
任務定時器–FluentScheduler組件可以在C#和ASP.NET程序中使用,使用方法很簡單,官方有使用案例:
FluentScheduler 中 對象: IJob(工作)、Registry(注冊)、Schedule(計劃)
二、實例
項目需要一個按時執行的任務,每隔幾分鐘執行一個,或者每隔幾小時執行一次等等,這個時候就需要一個定時的功能,最簡單的就是用Timer自己寫一個,但是自己寫的性能等各方面有可能不健全等等,而現在開源的庫也越來越多,功能也越來越好,直接拿來主義。
1.NuGet下載FluentScheduler控件
FluentScheduler定時任務庫,通過nuget引用,可以設置各種事件間隔,,超級方便簡單。
2.編寫一個注冊表。繼承Registry類
using FluentScheduler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NetFrameTest.test
{
public class MyRegistry : Registry
{
public MyRegistry()
{
// 每天執行一次(這里是在每天的下午 15:40 分執行),可以不用類,直接虛擬方法
Schedule(() => Console.WriteLine("It's 15:42 now.")).ToRunEvery(1).Days().At(15, 42);
// 每兩秒執行一次(指定一個時間間隔運行,根據自己需求,可以是秒、分、時、天、月、年等。)
Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();
// 每五秒執行一次(延遲一個指定時間間隔執行一次計劃任務)
Schedule<MyJob>().ToRunOnceIn(5).Seconds();
// 每月執行一次(這里是在每月的第一周的周一3點執行)
Schedule<MyJob>().ToRunNow().AndEvery(1).Months().OnTheLast(DayOfWeek.Friday).At(16, 0);
// 構造函數執行
Schedule(() => new MyOtherJob("Foo")).ToRunNow().AndEvery(2).Seconds();
// 先執行第一個Job、再執行第二個Job;完成后等5秒繼續循環
Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();
}
}
}
3.編寫定時執行任務,工作類
根據使用方法,是否實現IJob接口
public class MyJob : IJob
{
public void Execute()
{
Console.WriteLine($"MyJob 當前時間:{DateTime.Now}");
}
}
public class MyOtherJob : IJob
{
private string Name;
public MyOtherJob(string name)
{
Name = name;
}
public void Execute()
{
Console.WriteLine($"MyOtherJob 姓名:{Name} 當前時間:{DateTime.Now}");
}
}
4.初始化定時器
定時任務寫好之后只需要在Main中引用就可以了
// static void Main(string[] args)
JobManager.Initialize(new MyRegistry());
在ASP.NET程序的Global.asax文件中,首先初始化管理器,這樣定時器就開啟了。
protected void Application_Start()
{
JobManager.Initialize(new MyRegistry());
}
以上是第一種寫法,下面介紹第二種寫法,這里執行多個任務 不同時間段
protected void Application_Start()
{
JobManager.AddJob<MyJob>(t=>t.ToRunEvery(1).Days().At(24,00));//每天的凌晨12點 執行
JobManager.AddJob<MyOtherJob>(t => t.ToRunEvery(1).Months().OnTheLastDay().At(8,30));//每個月的最后一天早上八點半 執行
JobManager.Start();//啟動任務管理器
}
原文鏈接:https://www.cnblogs.com/springsnow/p/13158559.html
相關推薦
- 2023-01-05 Kotlin?協程與掛起函數及suspend關鍵字深入理解_Android
- 2022-08-20 python操作csv格式文件之csv.DictReader()方法_python
- 2022-07-10 uniapp.navigateTo找不到文件路徑,無法進行頁面跳轉,不報錯
- 2022-03-12 使用xshell連接linux服務器_Linux
- 2023-12-12 設置線程名稱(兩種方法)
- 2022-10-12 sql中exists的基本用法示例_MsSql
- 2022-04-27 Shell中關于exit?0的那些坑_linux shell
- 2022-07-22 Maven項目編譯運行后target/classes目錄下沒有xml和properties文件
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支