public static ResponseMessage StartSyncFiles(IList <SyncFranchiseModel> lstFranchiseSyncFiles) { var res = new ResponseMessage(); if (lstFranchiseSyncFiles.Any() == false) { res.IsSuccess = true; return(res); } using (var client = new SyncServerSvcClient()) { WcfExt.SetMtomEncodingAndSize(client.Endpoint); foreach (var syncFranchiseModel in lstFranchiseSyncFiles) { var clientIn = client; var tasks = new List <Task>(); var syncFranchiseModelCopy = syncFranchiseModel; var subscribe = syncFranchiseModel.LstFiles.ToObservable().Subscribe(syncFile => { switch (syncFile.FileType) { case SettingsData.Constants.FranchiseConst.SYNC_FILE_TYPE_DATA: { tasks.Add(CheckFilesAndSync(syncFile, syncFranchiseModelCopy.Code, clientIn, syncFranchiseModelCopy.FranchiseDataVersionUid)); break; } case SettingsData.Constants.FranchiseConst.SYNC_FILE_TYPE_LOGO: case SettingsData.Constants.FranchiseConst.SYNC_FILE_TYPE_IMAGE_NOTIFICATION: { var uriPath = syncFile.FileType == SettingsData.Constants.FranchiseConst.SYNC_FILE_TYPE_LOGO ? SharedConstants.Client.URI_LOGO : SharedConstants.Client.URI_IMAGE_NOTIFICATION; tasks.Add(CheckResourceAndSync(syncFile, uriPath, syncFile.FileType, clientIn)); break; } default: syncFile.HasError = false; break; } }); Task.WaitAll(tasks.ToArray()); subscribe.Dispose(); } var sb = new StringBuilder(); res.IsSuccess = true; foreach (var syncFranchiseModel in lstFranchiseSyncFiles.Where(e => e.FranchiseId != SharedConstants.ALL_FRANCHISES)) { try { var franchiseSuccess = true; foreach (var syncFile in syncFranchiseModel.LstFiles.Where(syncFile => syncFile.HasError)) { sb.AppendLine(syncFile.Message); res.IsSuccess = false; franchiseSuccess = false; } if (franchiseSuccess) { client.SetFranchiseVersionTerminalOk(syncFranchiseModel.FranchiseId, syncFranchiseModel.Version, Cypher.Encrypt(Environment.MachineName)); } } catch (Exception ex) { res.IsSuccess = false; sb.AppendLine(ex.Message + " -ST- " + ex.StackTrace); } } if (res.IsSuccess == false) { res.Message = sb.ToString(); } } return(res); }