.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));
                //驗證完成后業務處理
               //
              //
    
                }
            }
          
        }                   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM