并行执行同步任务

同步执行多个任务:Parallel.For(1, pageCount + 1, i => DataSync(i, fieldMappings));

/// <summary>
        /// 定时同步逻辑
        /// </summary>
        /// <returns></returns>
        public bool SyncGuest()
        {
            // 获取总数
            var totalCount = GetTotalCount(EVENTID);

            if (totalCount == 0)
            {
                Console.WriteLine("没有需要同步的数据");

                return true;
            }

            // 页数
            int pageCount = (int)Math.Ceiling((double)(totalCount / 50.0));

            // 发布后运行路径
            var mappingFilePath = Path.GetFullPath($"{AppDomain.CurrentDomain.BaseDirectory}/Json/ZFCateCertFieldMapping.json");
            // 本地运行路径
            //var mappingFilePath = Path.GetFullPath("../../Json/ZFCateCertFieldMapping.json");
            var fieldMappings = JsonConvert.DeserializeObject<List<ZFCateCertFieldMapping>>(File.ReadAllText(mappingFilePath));

            if (fieldMappings != null)
            {
                 // 并行执行同步任务
                var result = Parallel.For(1, pageCount + 1, i => DataSync(i, fieldMappings));

                 return result.IsCompleted ? true : false;
            }
            else
            {
                Console.WriteLine("大会的配置字段文件为空,不能同步");
                FileLogHelper.Log("大会数据同步数据失败-字段匹配失败:匹配字段为空。");
            }

            return true;
        }
/// <summary>
        /// 并行同步数据
        /// </summary>
        /// <param name="pageIndex">分页中的第几页</param>
        /// <returns>返回的是成功与失败的条数消息</returns>
        private void DataSync(int pageIndex, List<ZFCateCertFieldMapping> fieldMappings)
        {
            const long eventId = EVENTID;

            var query = new HYQuery<QueryEventJoin>()
                .EQ(a => a.EventId, eventId)
                .EQ(a => a.Status, HYEventJoin.JoinStatus.已审核)
                .FieldNamesEQ("ExtraFields.Field1585023508", "政审通过");

            // 如果不是同步所有数据,则需要加上时间限制
            if (!IsSyncAll)
            {
                query = query.And(GetDateQuery());
            }

            // 分页取数据
            var res = RestHelper.EventJoin.GetJoins(eventId, query, pageIndex, 50);

            if (res.IsOk() && res.Body.List.Any())
            {
                // 开始同步
                BeginDataSync(res.Body.List, fieldMappings);
            }
            else
            {                
                FileLogHelper.Log("大会数据同步数据失败-获取参会人出错或没有需要同步的数据");
            }
        }

执行完后,有个状态,表示是否执行完

// 并行执行同步任务
                var result = Parallel.For(1, pageCount + 1, i => DataSync(i, fieldMappings));

                return result.IsCompleted ? true : false;
原文地址:https://www.cnblogs.com/yxzs/p/11199901.html