程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 根據自定義線程定時器 生成隨機訂單,

C# 根據自定義線程定時器 生成隨機訂單,

編輯:C#入門知識

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 (ran > 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                 else
52                 {
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             else
61             {
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     }

 

我們來看看結果

上面的運行結果,大家注意時間,我是在今日任務完成的情況下,我直接修改系統時間為第二天,然後繼續第二天的任務

這樣就保證了程序如果一直在運行的情況下,完成每日的生成訂單的量。

但是需要注意的是,我沒有考慮如果程序重啟的情況,需要各位根據各自的情況進行修改~!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved