.netcore 使用多线程Task消费队列进行消费
WebApiResult为封装公用方法,不是微软自带,此段代码指是做画龙点睛作用,添加队列、异步消费等
public async Task AuthentDeal() { //从数据库查询要处理的队列 var batchList = _MySqlMasterDb.tab1.Where(p => p.is_certifi == -1).ToList(); if (batchList.Count <= 0) { return; } Dictionary<Guid, WebApiResult> resultList = new Dictionary<Guid, WebApiResult>(); //将查询对象放入队列 ConcurrentQueue<tab1> searchQueue = new ConcurrentQueue<tab1>(); foreach (var item in batchList) { searchQueue.Enqueue(item); } //设置线程数量 int threadCount = searchQueue.Count < Environment.ProcessorCount ? searchQueue.Count : Environment.ProcessorCount; Task[] tasks = new Task[threadCount]; for (int i = 0; i < threadCount; i++) { tasks[i] = Task.Run(() => { WebApiResult taskResult = new WebApiResult(); while (searchQueue.TryDequeue(out partners t)) { taskResult = VerifyPartners(t).Result;//验证方法 if (taskResult != null) { resultList.Add(t.id, taskResult);//验证结果存入字典中 } } return taskResult; }); } Task.WaitAll(tasks); foreach (var item in batchList) { if (resultList.ContainsKey(item.id)) { var verifyResult = resultList[item.id]; var authResult = JsonConvert.DeserializeObject<Tuple<bool, List<CertificateErrorType>, TencentBankQueryResult, string, bool>>(JsonConvert.SerializeObject(verifyResult.Data)); //验证完成后业务处理 // // } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律