打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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     }

我们来看看结果

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

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#中Task任务和Async、Await异步非阻塞方式
异步编程初探async和await
.NET异步和多线程系列(二)- Thread和ThreadPool
C# 探秘线程如何终止
在Global.asax中使用定时器来统计在线人数和每天每月的访问量
Datetime 在C#中的用法 获取当前时间的各种格式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服