private void ProcessStreamXmlContexts(ref bool r, FA mode , StreamXmlStage firstStage // = StreamXmlStage.Preload , StreamXmlStage lastStagePlusOne // = StreamXmlStage.kNumberOf , Engine.XmlFilePriority firstPriority = Engine.XmlFilePriority.Lists , Engine.XmlFilePriority lastPriorityPlusOne = Engine.XmlFilePriority.kNumberOf ) { SetupStreamXmlContexts(); for (var s = firstStage; s < lastStagePlusOne; s++) { var args = new ProcessStreamXmlContextStageArgs(mode, s, firstPriority, lastPriorityPlusOne); ProcessStreamXmlContextStage(ref r, args); } }
private void ProcessStreamXmlContextStage(ref bool r, ProcessStreamXmlContextStageArgs args) { var mode = args.Mode; for (var p = args.FirstPriority; p < args.LastPriorityPlusOne; p++) { foreach (var ctxt in mStreamXmlContexts) { if (ctxt.ProtoFileInfo.Priority != p) { continue; } switch (args.Stage) { #region Preload case StreamXmlStage.Preload: { if (ctxt.Preload == null) { break; } var task = Task <bool> .Factory.StartNew(() => TryStreamData(ctxt.FileInfo, mode, ctxt.Preload)); args.Tasks.Add(task); } break; #endregion #region Stream case StreamXmlStage.Stream: { if (ctxt.Stream == null) { break; } var task = Task <bool> .Factory.StartNew(() => TryStreamData(ctxt.FileInfo, mode, ctxt.Stream)); args.Tasks.Add(task); } break; #endregion #region StreamUpdates case StreamXmlStage.StreamUpdates: { if (ctxt.FileInfoWithUpdates == null) { break; } if (ctxt.StreamUpdates == null) { break; } var task = Task <bool> .Factory.StartNew(() => TryStreamData(ctxt.FileInfoWithUpdates, mode, ctxt.StreamUpdates)); args.Tasks.Add(task); } break; #endregion } } if (!args.UpdateResultWithTaskResults(ref r)) { var inner = args.TaskExceptions.ToAggregateExceptionOrNull().GetOnlyExceptionOrAllWhenAggregate(); throw new InvalidOperationException(string.Format( "Failed to process one or more files for priority={0}", p), inner); } args.ClearTaskData(); } }