zoukankan      html  css  js  c++  java
  • 并行执行同步任务

    同步执行多个任务: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;
  • 相关阅读:
    第9课
    FreeRTOS 定时器组
    FMC—扩展外部 SDRAM
    FreeRTOS 事件标志组
    第8课
    FreeRTOS 系统时钟节拍和时间管理
    第七课 线性表的顺序存储结构
    手把手教你调试Linux C++ 代码(一步到位包含静态库和动态库调试)
    Windows GUI代码与Windows消息问题调试利器
    谈谈数据挖掘和机器学习
  • 原文地址:https://www.cnblogs.com/yxzs/p/11199901.html
Copyright © 2011-2022 走看看