• 并行执行同步任务


    同步执行多个任务: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;
  • 相关阅读:
    【转】Odoo开发之:工作流 workflow
    【转】Odoo:基本字段类型
    【转】odoo 10的企业微信发送程序介绍
    Installing python-ldap in Ubuntu
    Odoo8中安装新模块找不到的问题
    mybatis缓存
    ThreadPoolExecutor线程池进阶使用
    使用Dubbo实现RPC调用
    java静态代理模式
    java四种线程池
  • 原文地址:https://www.cnblogs.com/yxzs/p/11199901.html
Copyright © 2020-2023  润新知