日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#-进击Hangfire

發布時間:2024/1/8 C# 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#-进击Hangfire 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hangfire 分布式后端作業調度框架服務

    • CronExpression(cron表達式)- CronTriggers(cron觸發器)
      • 格式
      • 字段含義
      • 部分示例
      • cron表達式在線生成
      • Hangfire對于cron表達式支持的那些坑

CronExpression(cron表達式)- CronTriggers(cron觸發器)

CronTriggers往往比SimpleTrigger更有用,如果您需要基于日歷的概念,而非SimpleTrigger完全指定的時間間隔,復發的發射工作的時間表。
CronTrigger,你可以指定觸發的時間表如“每星期五中午”,或“每個工作日9:30時”,甚至“每5分鐘一班9:00和10:00逢星期一上午,星期三星期五“。
即便如此,SimpleTrigger一樣,CronTrigger擁有的startTime指定的時間表時生效,指定的時間表時,應停止(可選)結束時間。

cron ['kr?n] :克龍(時間單位,等于百萬年)
trigger [?tr?ɡ?]

格式

cron表達式是一個字符串,字符串以5或6個空格隔開,分為6或7個域,每一個域代表一個含義,Cron有如下兩種語法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year

Seconds Minutes Hours DayofMonth Month DayofWeek

字段含義

字段可用值
Seconds (秒)可以用數字 0-59 ,’ - ’ , ’ * ’ , ’ / ’ 表示
Minutes(分)可以用數字 0-59 ,’ - ’ , ’ * ’ , ’ / ’ 表示
Hours(時)可以用數字 0 - 23,’ - ’ , ’ * ’ , ’ / ’ 表示
Day-of-Month(天)可以用數字 1 - 31 ,’ - ’ , ’ * ’ , ’ ? ’ , ’ / ’ , ’ L ’ , ’ W ’ , ’ C ’ 表示,但要注意一些特別的月份
Month(月)可以用 0 - 11 ,或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV , DEC” ,或 ’ - ’ , ’ * ’ , ’ / ’ 表示
Day-of-Week(周)可以用數字 1 - 7 表示(1 = 星期日),或用字符口串“SUN, MON, TUE, WED, THU, FRI , SAT”,或 ’ - ’ , ’ * ’ , ’ ? ’ , ’ / ’ , ’ L ’ , ’ C ’ , ’ # ’ 表示
Year(年)可以留,或 1970 - 2099 ,’ - ’ , ’ * ’ , ’ / ’ 表示
特殊字符含義限制示例
*表示所有值如在Minutes域使用*, 即表示每分鐘都會觸發事件
表示未說明的值,即不關心它為何值只能用在DayofMonth和DayofWeek域它也匹配域的任意值,但實際不會。因為DayofMonth和DayofWeek會相互影響。例如想在每月的20日觸發調度,不管20日到底是星期幾,則只能使用如下寫法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期幾都會觸發
-表示一個指定的范圍如在Minutes域使用5-20,表示從5分到20分鐘每分鐘觸發一次
表示列出枚舉值在Minutes域使用5,20,則意味著在5和20分每分鐘觸發一次
/符號前表示開始時間,符號后表示每次遞增的值如“0/15”表示每隔15分鐘執行一次,“0”表示為從“0”分開始, “3/20”表示表示每隔20分鐘執行一次,“3”表示從第3分鐘開始執行
#表示這個月的第幾個周幾 ,符號前為周幾,符號后為第幾個只能用在day-of-week域如"6#3"指這個月第3個周五(6指周五,3指第3個)。如果指定的日期不存在,觸發器就不會觸發
L表示最后只能出現在DayofWeek和DayofMonth域用在day-of-month字段意思是 “這個月最后一天”;用在 day-of-week字段, 它簡單意思是 “7” or “SAT”。 如果在day-of-week字段里和數字聯合使用,它的意思就是 “這個月的最后一個星期幾” – 例如: “6L” 意味"這個月的最后一個星期五"
W表示最接近指定天的工作日(周一到周五),系統將在離指定日期的最近的有效工作日觸發事件只能出現在DayofMonth域在day-of-month字段用“15W”指“最接近這個 月第15天的工作日”,即如果這個月第15天是周六,那么觸發器將會在這個月第14天即周五觸發;如果這個月第15天是周日,那么觸發器將會在這個月第 16天即周一觸發;如果這個月第15天是周二,那么就在觸發器這天觸發。注意一點:這個用法只會在當前月計算值,不會越過當前月。“W”字符僅能在 day-of-month指明一天,不能是一個范圍或列表。也可以用“LW”來指定這個月的最后一個工作日
LW表示在某個月最后一個工作日只能出現在DayofMonth域即最后一個星期五
C指和calendar聯系后計算過的值如在day-of-month 字段用“5C”指在這個月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在這周日或之后包括calendar的第一天

部分示例

*/5 * * * * ? 每隔5秒執行一次
0 */1 * * * ? 每隔1分鐘執行一次
0 0 5-15 * * ? 每天5-15點整點觸發
0 0/3 * * * ? 每三分鐘觸發一次
0 0-5 14 * * ? 在每天下午2點到下午2:05期間的每1分鐘觸發
0 0/5 14 * * ? 在每天下午2點到下午2:55期間的每5分鐘觸發
0 0/5 14,18 * * ? 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點

0 0 12 ? * WED 表示每個星期三中午12點
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五點
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44觸發
0 15 10 ? * MON-FRI 周一至周五的上午10:15觸發
0 0 23 L * ? 每月最后一天23點執行一次
0 15 10 L * ? 每月最后一日的上午10:15觸發
0 15 10 ? * 6L 每月的最后一個星期五上午10:15觸發
0 15 10 * * ? 2005 2005年的每天上午10:15觸發
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一個星期五上午10:15觸發
0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發

“30 * * * * ?” 每半分鐘觸發任務
“30 10 * * * ?” 每小時的10分30秒觸發任務
“30 10 1 * * ?” 每天1點10分30秒觸發任務
“30 10 1 20 * ?” 每月20號1點10分30秒觸發任務
“30 10 1 20 10 ? *” 每年10月20號1點10分30秒觸發任務
“30 10 1 20 10 ? 2011” 2011年10月20號1點10分30秒觸發任務
“30 10 1 ? 10 * 2011” 2011年10月每天1點10分30秒觸發任務
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1點10分30秒觸發任務
“15,30,45 * * * * ?” 每15秒,30秒,45秒時觸發任務
“15-45 * * * * ?” 15到45秒內,每秒都觸發任務
“15/5 * * * * ?” 每分鐘的每15秒開始觸發,每隔5秒觸發一次
“15-30/5 * * * * ?” 每分鐘的15秒到30秒之間開始觸發,每隔5秒觸發一次
“0 0/3 * * * ?” 每小時的第0分0秒開始,每三分鐘觸發一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10點15分0秒觸發任務
“0 15 10 L * ?” 每個月最后一天的10點15分0秒觸發任務
“0 15 10 LW * ?” 每個月最后一個工作日的10點15分0秒觸發任務
“0 15 10 ? * 5L” 每個月最后一個星期四的10點15分0秒觸發任務
“0 15 10 ? * 5#3” 每個月第三周的星期四的10點15分0秒觸發任務

cron表達式在線生成

在線Cron表達式生成器
quartz/Cron/Crontab表達式在線生成工具

Hangfire對于cron表達式支持的那些坑

  • 截止目前為止我使用的是1.6.22,就是最新免費版本驗證發現下面這些。
  • hangfire因為最多到分鐘級別,所以,其支持的cron表達式僅僅只有5個域,沒有秒和年,即 Minutes Hours DayofMonth Month DayofWeek 。所以如果自己直接寫cron字符串的話,超過五個域它會報錯。
  • 對于cron表達式中的一些拓展字符并不支持,目前發現有 對于 L并不能夠識別,對于月和周的JAN - DECSUN - SAT也不識別,只能是1-31,1-7。所以自己寫字符串請不要帶上這些字符。如配置每月最后一天就無法直接配置,必須自己手動寫一些邏輯才行。What happens on day 31的官方論壇討論

感謝以下參考資料,本人做的主要是驗證、學習、整合:
cron表達式詳解,cron表達式寫法,cron表達式例子
Cron表達式說明
cron表達式詳解

總結

以上是生活随笔為你收集整理的C#-进击Hangfire的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。