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     }

我们来看看结果

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

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

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

时间: 2024-08-01 15:08:26

C# 根据自定义线程定时器 生成随机订单的相关文章

生成随机订单号

//生成随机订单号 $yCode = array('A','B','C','D','E','F','G','H','I','J'); $orderid = $yCode[intval(date('Y')) - 2011] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));

【甘道夫】开发Hive自定义UDF,生成32位字母数字随机串

引言 曾经认为Hive自带的函数应该可以cover住我的日常所需,心想那些需要使用自定义函数的场景是不是太奇葩,谁知命运弄人,自己还是碰上了. 需求很简单,我需要模拟Oracle中的SYS_GUID()函数,生成一个32位的字母数字随机串. 开发环境:Eclipse+Maven,引入Hive0.13.1的依赖. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/41083617 代码 package cn.fulong.big

.net生成随机字符串

生成随机字符串的工具类: /// <summary> /// 随机字符串工具类 /// </summary> public class RandomTools { /// <summary> /// 随机系数 /// </summary> public static int _RandIndex = 0; #region 获取某个区间的一个随机数 /// <summary> /// 获取某个区间的一个随机数 /// </summary>

看我是如何处理自定义线程模型---java

看过我之前文章的园友可能知道我是做游戏开发,我的很多思路和出发点是按照游戏思路来处理的,所以和web的话可能会有冲突,不相符合. 来说说为啥我要自定义线程模型呢? 按照我做的mmorpg或者mmoarpg游戏划分,线程被划分为,主线程,全局同步线程,聊天线程,组队线程,地图线程,以及地图消息分发派送线程等: 一些列,都需要根据我的划分,以及数据流向做控制. 游戏服务器,主要要做的事情,肯定是接受玩家的 命令请求 -> 相应的操作 -> 返回结果: 在服务器端所有的消息都会注册到消息管理器里,然

HTML5+CSS3鼠标移入移出图片生成随机动画

今天分享使用html+css3+少量jquery实现鼠标移入移出图片生成随机动画,我们先看最终效果图(截图为静态效果,做出来可是动态的哟) 左右旋转 上下移动 缩放 由于时间关系我就不一步步解析各段代码所代表含义,我这里就给出一些思路及关键代码: 1.首先使用ul li展现4张图片 本示例中不仅使用了图片,在图片表面还放置了一段“WEB”字样文字,用于与图片实现隐藏或显示效果,故html中每张图片上方加入: <div class="mytext">WEB</div&g

利用Java随机,生成随机学生数据

为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 students表设计如下: 其中前三项是数据库自动生成的,后面的10项需要程序生成. >>基于实际要求,插入的Student数据中,major和jnshuId不能同时相同.但由于随机数的不确定性,在程序中限制两个Student的major和jnshuId不同时相同复杂而低效.因此,选择在数据库中将major

Java 多线程 自定义线程辅助

之前的文章我介绍了C#版本的多线程和自定义线程处理器. 接下来我们来看看Java版本的呢 java 的线程和C#的线程有点区别,java的线程没有是否是后台线程一说,具体原因是java的线程是jvm的c++代码模拟线程,而C#的线程也是C++模拟线程.但是区别在于C#的线程会基于系统的线程. C# 的 Thread.IsBackground; 这里唯一的区别在于,C#开启线程如果是非后台线程即便是你关闭了程序,如果不是强制退出进程的情况下.线程还会继续运行,知道垃圾回收机制强制回收.如果设置了后

c# 多线程系列二 自定义线程执行器

看了第一篇文章,多线程系列,看到了在线程执行任务队列有了一定的了解~! 那么今天我来讲讲,怎么样构建通用的自定义线程概念! 线程执行任务,肯定要有目标,但是如果写死了,那么一个线程处理执行职能按照思路处理一类任务,显然不满足我们的实际场景的需求,那么怎么才能创建灵活的线程执行器呢! 首先我们来创建一个任务构造器! 1 /// <summary> 2 /// 线程模型执行任务 基类 3 /// </summary> 4 public abstract class BaseTask 5

.net生成随机验证码图片

/// <summary> /// 自定义图片验证码函数 /// 该函数将生成一个图片验证码,并将生成的code存放于Session["VerifyCode"]变量内. /// </summary> /// <param name="codeLength">验证码长度</param> /// <param name="codeFontsize">字体大小</param> //