private void DivideTask(UploadTypeDetail uploadTypeDetail, List <Policies> lstPolicies, QunarUploadPolicyRequest qunarRequest, List <SeatDiscountDto> seatDiscountList, Func <Policies, QunarUploadConfigResponse, QunarPolicyType, List <SeatDiscountDto>, QunarPolicyListBase> funcAdd, Func <Policies, QunarPolicyType, QunarDeletePolicyBase> funcDel) { ConcurrentBag <Task> tasks = new ConcurrentBag <Task>(); Task mangerTask = Task.Factory.StartNew(() =>//开启管理线程分配任务 { int currentTaskCount = 0; while (lstPolicies.Count > 0) { while (currentTaskCount >= qunarRequest.MaxTaskCount) { int index = Task.WaitAny(tasks.ToArray());//等待任何一个线程完成 currentTaskCount--; } List <Policies> childCollection = lstPolicies.Take(qunarRequest.PerTaskCount).ToList(); if (childCollection.Count > 0) { lstPolicies.RemoveRange(0, childCollection.Count); Task subTask = Task.Factory.StartNew(() =>//开启子线程处理 { #region 子线程执行的方法 foreach (Policies item in childCollection) { switch (uploadTypeDetail) { case UploadTypeDetail.FullUpload: //全量 case UploadTypeDetail.IncrementalAdd: //增量添加 { QunarPolicyListBase baseList = funcAdd(item, qunarRequest.DefaultUploadConfig, qunarRequest.PolicyType, seatDiscountList); if (baseList != null) { qunarAddPolicy.Add(baseList); } } break; case UploadTypeDetail.IncrementalDelete: { qunarDelPolicy.Add(funcDel(item, qunarRequest.PolicyType)); } break; default: break; } } #endregion }); currentTaskCount++; tasks.Add(subTask); } } }); Task.WaitAll(mangerTask); Task.WaitAll(tasks.ToArray()); }
/// <summary> /// 转换成去哪儿新增政策格式 /// </summary> /// <param name="policy"></param> /// <returns></returns> private QunarPolicyListBase ChangeToQunarAddPolicy(Policies policy, QunarUploadConfigResponse defaultUploadConfig, QunarPolicyType policyType, List <SeatDiscountDto> seatDiscountList) { QunarPolicyListBase policyList = new QunarPolicyListBase(); #region 根据上传类型封装不同的政策节点 switch (policyType) { case QunarPolicyType.APPLY: //单程申请 break; case QunarPolicyType.COMMON: //单程普通 { policyList = ChangeToQunarCommonPolicy(policy, defaultUploadConfig); } break; case QunarPolicyType.CUSTOMER: //包机切位 break; case QunarPolicyType.LOWPRICE: //特价政策 break; case QunarPolicyType.PREPAY: //单程预付 { policyList = ChangeToQunarPrepayPolicy(policy, defaultUploadConfig, seatDiscountList); } break; case QunarPolicyType.ROUNDALL: //往返所有类型 break; case QunarPolicyType.ROUNDPREPAY: //往返预付 break; case QunarPolicyType.ROUNDSPECIAL: //往返特价 break; case QunarPolicyType.SINGLEALL: //单程所有类型 break; default: break; } #endregion return(policyList); }