弹来弹去跑马灯!

c#利用异步方法去模拟多线程处理业务

一个巧妙的设计

原理:利用async 标识方法执行异步处理

  List<long> listIds = new List<long>();//业务任务:假设处理这个列表的任务
        object lockObj = new object();//锁对象
        bool stopFlag = false;//停止标识

        /// <summary>
        /// 异步任务持续工作直到stopFlag=true或者任务完成(没有需要处理的业务)
        /// </summary>
        /// <param name="taskId">任务ID</param>
        async void test(int taskId)
        {
            if (stopFlag) 
            {
                return;
            }
            long  id = 0;
            lock (lockObj)
            {
                if (listIds.Count <= 0) 
                {
                    return;
                }
               id = listIds[0];
               listIds.RemoveAt(0);
            }
            Debug.Print("task"+ taskId+":  " +id);
            await Task.Delay(2000);
            test(taskId);
        }


        /// <summary>
        /// 测试5个任务循环处理
        /// </summary>
        void testTaskRun() {
            //假设初始化业务任务列表
            for (int i = 0; i <= 100; i++)
            {
                listIds.Add(i);
            }
            //例如搞5个任务去执行(类似启动5个线程去搞)
            test(1);
            test(2);
            test(3);
            test(4);
            test(5);

        }

  

posted @ 2023-01-15 20:43  wgscd  阅读(45)  评论(0)    收藏  举报