Changeset 15393 for stable/HeuristicLab.ParallelEngine
- Timestamp:
- 10/03/17 09:27:05 (7 years ago)
- Location:
- stable
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 15368,15376
- Property svn:mergeinfo changed
-
stable/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs
r14186 r15393 101 101 try { 102 102 Parallel.ForEach(stacks, parallelOptions, Run); 103 } 104 catch (OperationCanceledException ex) { 105 OperationCollection remaining = new OperationCollection() { Parallel = true }; 106 for (int i = 0; i < stacks.Length; i++) { 107 if (stacks[i].Count == 1) 108 remaining.Add(stacks[i].Pop()); 109 if (stacks[i].Count > 1) { 110 OperationCollection ops = new OperationCollection(); 111 while (stacks[i].Count > 0) 112 ops.Add(stacks[i].Pop()); 113 remaining.Add(ops); 114 } 115 } 116 if (remaining.Count > 0) executionStack.Push(remaining); 117 throw ex; 103 } catch (OperationCanceledException) { 104 RepairStack(executionStack, stacks); 105 throw; 106 } catch (AggregateException) { 107 RepairStack(executionStack, stacks); 108 throw; 118 109 } 119 110 } else { … … 128 119 catch (Exception ex) { 129 120 executionStack.Push(operation); 130 if (ex is OperationCanceledException) throw ex;121 if (ex is OperationCanceledException) throw; 131 122 else throw new OperatorExecutionException(operation.Operator, ex); 132 123 } 133 124 if (next != null) executionStack.Push(next); 134 135 if (operation.Operator.Breakpoint) {136 string message = string.Format("Breakpoint: {0}", operation.Operator.Name != string.Empty ? operation.Operator.Name : operation.Operator.ItemName);137 Log.LogMessage(message);138 throw new OperationCanceledException(message);139 }140 125 } 141 126 } 142 127 } 128 129 private static void RepairStack(Stack<IOperation> executionStack, Stack<IOperation>[] parallelExecutionStacks) { 130 OperationCollection remaining = new OperationCollection() { Parallel = true }; 131 for (int i = 0; i < parallelExecutionStacks.Length; i++) { 132 if (parallelExecutionStacks[i].Count == 1) 133 remaining.Add(parallelExecutionStacks[i].Pop()); 134 if (parallelExecutionStacks[i].Count > 1) { 135 OperationCollection ops = new OperationCollection(); 136 while (parallelExecutionStacks[i].Count > 0) 137 ops.Add(parallelExecutionStacks[i].Pop()); 138 remaining.Add(ops); 139 } 140 } 141 if (remaining.Count > 0) executionStack.Push(remaining); 142 } 143 143 } 144 144 }
Note: See TracChangeset
for help on using the changeset viewer.