zoukankan      html  css  js  c++  java
  • .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));
                    //验证完成后业务处理
                   //
                  //
        
                    }
                }
              
            }                   
  • 相关阅读:
    response输出随机图片、定时刷新网页
    @Transactional注解使用心得
    mybatis缓存(一,二级别)
    数据库四大特性及数据库隔离级别
    mybatis @SelectKey加于不加的区别
    MYSQL索引类型+索引方法
    页面缓存例子
    概率生成模型超越神经网络
    生成学习
    过程量与状态量
  • 原文地址:https://www.cnblogs.com/personblog/p/13359017.html
Copyright © 2011-2022 走看看