.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));
                //验证完成后业务处理
               //
              //
    
                }
            }
          
        }                   
复制代码

 

posted @   低调码农哥!  阅读(2236)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示