C# 根據自定義線程定時器 生成隨機訂單
這個源之於一個朋友問我的一個問題,他說他們的需求是在一天之內隨機抽取數據生成訂單,還不能讓客戶看出來。
隨機生成的訂單還分概率抽取不一定的狀態值,那麼根據我之前寫的定時器線程執行器,我們設計需要一個定時器去執行。
那麼我們的定時器坑定需要一直運行,包括每天的情況。
創建 SecondsTimerTask 由於是測試條件下,我們聲明5秒運行一次
1 /// <summary> 2 /// 每秒執行的任務 3 /// </summary> 4 public class SecondsTimerTask : TimerTaskBase 5 { 6 /// <summary> 7 /// 定義一秒執行一次的 8 /// </summary> 9 public SecondsTimerTask()10 : base(0, 1000, false)11 {12 13 }14 15 List<int> ints1 = new List<int>() { 1, 2, 3, 4, 5 };16 List<int> ints2 = new List<int>() { 6, 7, 8, 9, 10 };17 18 string _ActionDay = string.Empty;19 int _ActionCount = 0;20 21 public override void Run()22 {23 string day = DateTime.Now.ToString("yyyy/MM/dd");24 if (!day.Equals(_ActionDay))25 {26 //如果是非本日情況,重置條件27 //可以根據自身的條件完成28 ints1 = new List<int>() { 1, 2, 3, 4, 5 };29 ints2 = new List<int>() { 6, 7, 8, 9, 10 };30 _ActionDay = day;31 _ActionCount = 0;32 }33 if (_ActionCount == 5)34 {35 Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "隨機生成訂單 今日任務完成");36 return;37 }38 int ran = new Random(DateTime.Now.Millisecond).Next(0, 100000);//用0到10萬為隨機界限標準39 if (ran < 70000)//70%的概率這次執行需要生產訂單40 {41 _ActionCount++;42 int ranNext = new Random(DateTime.Now.Millisecond).Next(0, 100000);//用0到10萬為隨機界限標準43 if (ranNext > 40000)44 {45 //60%的概率46 int index = new Random(DateTime.Now.Millisecond).Next(0, ints1.Count);47 int item = ints1[index];48 Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "隨機生成訂單60%的概率: " + item);49 ints1.RemoveAt(index);50 }51 else52 {53 ///40%的概率54 int index = new Random(DateTime.Now.Millisecond).Next(0, ints2.Count);55 int item = ints2[index];56 Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "隨機生成訂單40%的概率: " + item);57 ints2.RemoveAt(index);58 }59 }60 else61 {62 Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + " 根據隨機情況不生成訂單");63 }64 }65 }
請結合定時器線程章節,
1 class Program 2 { 3 4 static void Main(string[] args) 5 { 6 TimerThread timerThread = new TimerThread(); 7 timerThread.AddTask(new SecondsTimerTask()); 8 Console.ReadLine(); 9 }10 }
我們來看看結果
上面的運行結果,大家注意時間,我是在今日任務完成的情況下,我直接修改系統時間為第二天,然後繼續第二天的任務
這樣就保證了程序如果一直在運行的情況下,完成每日的生成訂單的量。
但是需要注意的是,我沒有考慮如果程序重啟的情況,需要各位根據各自的情況進行修改~!
推薦閱讀:
※神的定義是什麼呢?
※胃食管反流病定義、癥狀和危害
※何為格?何為局?《秘宗》子平「格」與「局」的定義
※快樂大本營重塑了內地「綜藝」和「娛樂」的定義,20 年了,它也被這兩個概念改變
※探索十神的定義與用法