首页 > 编程语言 >c#利用异步方法去模拟多线程处理业务

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

时间:2023-01-15 20:55:18浏览次数:48  
标签:异步 stopFlag 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);

        }

  

标签:异步,stopFlag,c#,业务,处理,任务,多线程
From: https://www.cnblogs.com/wgscd/p/17054097.html

相关文章

  • Rabbit在Centos7上安装
    须知1:erlang与rabbit-mq版本:https://rabbitmq.com/which-erlang.html须知2:在下载erlang时 erlang-23.3.4.8-1.el7.x86_64.rpm 的el7 是centos7安装,如果是el8 在cento......
  • CentOs 7.4安装Docker以及宝塔
    CentOs7.4.1708博主使用的服务器是CentOs7.4,1核2G1.安装Docker首先打开Docker官网:happy:1.设置仓库我们需要先安装yum-utils包,一会设置docker容器时,我们需要使用......
  • C 语言初学者必备开发工具——Dev-Cpp [ 图文安装教程 ]
    前言C语言是一门功能强大的专业化编程语言,深受专业程序员和业余编程爱好者的喜爱,同时C语言也是当今最流行的嵌入式开发语言。大多数嵌入式项目的开发都是用C语言来编......
  • axios_socketio_cros_test
    D:\code_gitee\html_crostest\htmo_crostest\index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><linkrel="icon"type="image/sv......
  • 窗口更新了数据,一定要commit才生效!
    记录一个非常stupid的记录在生产环境上修改了数据,然后再做查询,发现数据始终和服务器查询到的结果始终不相同。再让同事去查询,同事和服务器的一致,我的数据始终不一样。......
  • flask_socketio_cors
    D:\code_gitee\flask_socketio_online-ping-demo-master\online-ping-demo-master\python3\app.py#!/usr/bin/python3#-*-coding:utf-8-*-fromflaskimportcopy_c......
  • Modbus TCP
    ModbusTCP数据帧ModbusTCP的数据帧可分为两部分:MBAP+PDU。报文头MBAPMBAP为报文头,长度为7字节事务处理标识协议标识长度单元标识符2字节2字节2字节1字节......
  • 基于matlab的BOC调制信号捕获仿真
    1.算法描述       随着全球导航卫星系统的高速发展,导航系统的数量也越来越多,比如使用最广泛的GPS导航系统,以及越来越备受关注的中国北斗导航系统等.因此导航频......
  • C++中string占用内存大小
    转自:https://blog.csdn.net/DLUTBruceZhang/article/details/98222351.例子intmain(){strings="abc";cout<<sizeof(s)<<"\n";cout<<sizeof(string)<<"......
  • windows terminal 配置从当前目录打开 startingDirectory (vscode终端中按下wt后直接打
    我的需求我不想用vscode的终端运行项目,我想在windowsterminal里运行项目我想在vscode的终端里按下wt,然后直接打开一个新的windowsterminal窗口,而且船新的wt窗口的目......