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

发布时间 2023-12-01 16:46:30作者: 大懵呃
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);
        }
    }
}