这个源之于一个朋友问我的一个问题,他说他们的需求是在一天之内随机抽取数据生成订单,还不能让客户看出来。
随机生成的订单还分概率抽取不一定的状态值,那么根据我之前写的定时器线程执行器,我们设计需要一个定时器去执行。
那么我们的定时器坑定需要一直运行,包括每天的情况。
创建 SecondsTimerTask 由于是测试条件下,我们声明5秒运行一次
/// <summary> /// 每秒执行的任务 /// </summary> public class SecondsTimerTask : TimerTaskBase { /// <summary> /// 定义一秒执行一次的 /// </summary> public SecondsTimerTask() : , , false) { } List<, , , , }; List<, , , , }; string _ActionDay = string.Empty; ; public override void Run() { string day = DateTime.Now.ToString("yyyy/MM/dd"); if (!day.Equals(_ActionDay)) { //如果是非本日情况,重置条件 //可以根据自身的条件完成 ints1 = , , , , }; ints2 = , , , , }; _ActionDay = day; _ActionCount = ; } ) { Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "随机生成订单 今日任务完成"); return; } , );//用0到10万为随机界限标准 )//70%的概率这次执行需要生产订单 { _ActionCount++; , );//用0到10万为随机界限标准 ) { //60%的概率 , ints1.Count); int item = ints1[index]; Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "随机生成订单60%的概率: " + item); ints1.RemoveAt(index); } else { ///40%的概率 , ints2.Count); int item = ints2[index]; Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + "随机生成订单40%的概率: " + item); ints2.RemoveAt(index); } } else { Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff: ") + " 根据随机情况不生成订单"); } } }
请结合定时器线程章节,
class Program { static void Main(string[] args) { TimerThread timerThread = new TimerThread(); timerThread.AddTask(new SecondsTimerTask()); Console.ReadLine(); } }
我们来看看结果
上面的运行结果,大家注意时间,我是在今日任务完成的情况下,我直接修改系统时间为第二天,然后继续第二天的任务
这样就保证了程序如果一直在运行的情况下,完成每日的生成订单的量。
但是需要注意的是,我没有考虑如果程序重启的情况,需要各位根据各自的情况进行修改~!