一个巧妙的设计
原理:利用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); }
标签:异步,stopFlag,c#,业务,处理,任务,多线程 From: https://www.cnblogs.com/wgscd/p/17054097.html