zoukankan      html  css  js  c++  java
  • 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                 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     }

    我们来看看结果

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

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

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

    跪求保留标示符
    /**
     * @author: Troy.Chen(失足程序员, 15388152619)
     * @version: 2021-07-20 10:55
     **/
    
    C#版本代码 vs2010及以上工具可以
    
    java 开发工具是netbeans 和 idea 版本,只有项目导入如果出现异常,请根据自己的工具调整
    
    
    提供免费仓储。
    最新的代码地址:↓↓↓
    https://gitee.com/wuxindao
    
    觉得我还可以,打赏一下吧,你的肯定是我努力的最大动力
        
    
  • 相关阅读:
    UOS ROOT如何SSH登陆
    UOS打印日志提示Can’t create temporary file,无法打印如何处理
    UOS简易OEM ISO镜像的步骤(UOS如何自行定制镜像文件)
    UOS火狐浏览器如何下载并安装Adobe Flash Player插件【AMD】
    UOS如何录制屏幕视频
    UOS怎么进入到单用户模式
    UOS免密访问windows共享文件夹
    UOS命令行服务器离线授权码激活步骤
    UOS怎么安装搜狗拼音输入法【x86】
    UOS如何安装RTX客户端-更新版(X86)
  • 原文地址:https://www.cnblogs.com/shizuchengxuyuan/p/4349915.html
Copyright © 2011-2022 走看看