同步执行多个任务: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;