指定Task任务顺序执行
经常听到说线程池这个东西,凭印象写了个这么简单的例子。
CusTRun方法要不要await,取决于要不要作为后台任务。
任务可指定数量,线程参数可共享全,顺序可控,可继续改进。
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp1 { internal class Program { static AsyncLocal<int> asyncObj = new AsyncLocal<int>(); static async Task Main(string[] args) { await CusTRun(100, async () => { //TODO:业务代码 await Task.Delay(1000); Console.WriteLine(asyncObj.Value); Console.WriteLine("ManagedThreadId=" + Thread.CurrentThread.ManagedThreadId); }, default); Console.WriteLine("Hello World!"); Console.ReadKey(); } static async Task CusTRun(int count, Func<Task> func, CancellationToken cancellationToken) { ConcurrentDictionary<int, Task> taskDic = new ConcurrentDictionary<int, Task>(); for (int i = 0; i < count; i++) { asyncObj.Value = i; if (taskDic.Values.Count(t => t.Status != TaskStatus.RanToCompletion) >= 5) { taskDic = (ConcurrentDictionary<int, Task>)(taskDic.OrderBy(x => x.Key)); Task.WaitAny(taskDic.Values.ToArray()); taskDic.Values.Where(t => t.Status != TaskStatus.RanToCompletion).ToList(); } else { taskDic.TryAdd(i, Task.Run(func, cancellationToken)); } await Task.Delay(1000); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)