首页 > 其他分享 >.net core 使用Task多线程执行任务,限制线程数量,并等待所有任务结束

.net core 使用Task多线程执行任务,限制线程数量,并等待所有任务结束

时间:2023-12-01 16:59:13浏览次数:32  
标签:core Task System 任务 taskList 线程 using 多线程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataService.ETL_ApiData
{
    public class MultiTask
    {
        /// <summary>
        /// 最大线程数量
        /// </summary>
        private int _maxTaskCount = 10;
        public MultiTask() { 
        }

        public void StartTask() 
        {
            List<Task> taskList = new List<Task>();
            for (int i = 0; i < 20; i++) 
            {
                //添加任务
                taskList.Add(Task.Run(() => {
                    OutputMessage(i.ToString());
                }));

                //限制线程数量
                if (taskList.Count > _maxTaskCount)
                {
                    Task.WaitAny(taskList.ToArray());
                    taskList = taskList.Where(t => t.Status != TaskStatus.RanToCompletion).ToList();
                }
            }
            //等待任务结束
            Task.WaitAll(taskList.ToArray());
        }

        private void OutputMessage(string id) 
        {
            string message = string.Format(@"开始执行任务{0}",id);
            Console.WriteLine(message);
        }
    }
}

 

标签:core,Task,System,任务,taskList,线程,using,多线程
From: https://www.cnblogs.com/damenge/p/17870410.html

相关文章

  • .net7(.net core) 依赖注入:从 AddSingleton 注册的类里面访问 AddScoped 的问题
    记录一下以免忘记。今天从NopCommerce开源项目里面把它的任务调度类拆出来到我的项目用的时候,发现报错,报错信息如下Someservicesarenotabletobeconstructed(Errorwhilevalidatingtheservicedescriptor'ServiceType:OUC.Services.ScheduleTasks.ITaskSchedulerLi......
  • 聪明办法学python——Task05,06
    聪明办法学python——Task5,Task6Task05——循环for循环和循环范围特点:基于提供的范围,重复执行特定范围的操作forxinrange(n,m+1):  count+=1returncountrange(x,y)是左闭右开的区间,不含yreturnsum(range(m,n+1))range的第三个参数是步长,可正可负foriinrange(......
  • C#.NET 使用Task.Run和Task.Delay 延时执行任务
    C#.NET使用Task.Run和Task.Delay延时执行任务(代码) 环境:.NET4.5.2.NETWEBMVC+WEBAPI。 示例代码:usingCommonUtils;usingSystem;usingSystem.Threading.Tasks;usingSystem.Web.Http;namespaceWebApiTaskDelay.ApiControllers{publicclassMyCont......
  • .net core(web api) 后台 +uniapp移动端自动更新
    移动端采用uniapp开发后台采用.netcore先到插件市场找到对应的插件  然后将插件安装到 然后在移动端项目pages.json"path":"uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update","style":{"app-plus":{"......
  • 从零开始的 dbt 入门教程 (dbt-core 基础篇)
    最近一直在处理数据分析和数据建模的事情,所以接触了dbt等数据分析的工具,国内目前对于dbt比较详细的资料不多,所以打算写四道五篇dbt相关的文章,本文属于dbt系列的第一篇,本篇主要阐述dbt一些基本概念,教会你如何配置dbt连接远端数据库,并运行你的第一个数据模型,那么本文开......
  • 通过.NET Core+Vue3 实现SignalR即时通讯功能
    .NETCore和Vue3结合使用SignalR可以实现强大的实时通讯功能,允许实时双向通信。在这个示例中,我们将详细说明如何创建一个简单的聊天应用程序,演示如何使用.NETCoreSignalR后端和Vue3前端来实现实时通讯功能。步骤1:准备工作确保你已经安装了以下工具和环境:.NETCore......
  • 多线程连接池报错报警告[connectionpool.py:305 ] [WARNING] Connection pool is full
    第一种方法:按照建议WebDriverWait帮助解决了问题 fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.common.byimportByfromselenium.common.exceptionsimportT......
  • 多开中多线程,每个线程使用一个单例
    defsingleton(cls):threadNames=[]#线程名称列表instances={}#实例字典defget_instance(threadName,*args,**kwargs):"""获取单例实例,通过线程名创建单例,保障每个线程里面的实例保持一致参数:-threadName:......
  • FPGA入门笔记007_A——按键消抖模块设计与验证(状态机、$random、仿真模型、task语法)
    实验现象:每次按下按键0,4个LED显示状态以二进制加法格式加1。每次按下按键1,4个LED显示状态以二进制加法格式减1。知识点:1、testbench中随机数发生函数$random的使用;2、仿真模型的概念1、按键波形分析:按键未按,FPGA管脚检测到高电平。按键按下,FPGA管脚检测到低电平。2、设......
  • .net core 6 DEBUG环境下不注入的服务
    .netcore6中,如果有些服务不想在调试时启动,比如nacos及一些监听器,如果每次注释,难免会出错误。所以在Program.cs文件中写明,DEBUG环境下是不启动的:#ifDEBUG#else//Nacos服务发现注册builder.Services.AddNacosAspNet(builder.Configuration);//默认找"nacos"节//Nacos读取配......