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