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

复制代码
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);
        }
    }
}
复制代码

 

posted @   大懵呃  阅读(593)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示