你的位置:首页 > ASP.net教程

[ASP.net教程]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         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   }

 

我们来看看结果

上面的运行结果,大家注意时间,我是在今日任务完成的情况下,我直接修改系统时间为第二天,然后继续第二天的任务

这样就保证了程序如果一直在运行的情况下,完成每日的生成订单的量。

但是需要注意的是,我没有考虑如果程序重启的情况,需要各位根据各自的情况进行修改~!