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);
        }