Changeset 15065 for branches/Async/HeuristicLab.Optimization/3.3/Algorithms
- Timestamp:
- 06/26/17 09:45:36 (7 years ago)
- Location:
- branches/Async/HeuristicLab.Optimization/3.3/Algorithms
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Async/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
r13354 r15065 204 204 Prepare(); 205 205 } 206 public void Start() { 207 StartAsync().Wait(); 208 } 209 public async Task StartAsync() { 210 await StartAsync(CancellationToken.None); 211 } 212 public virtual async Task StartAsync(CancellationToken cancellationToken) { 206 public virtual void Start() { 207 Start(CancellationToken.None); 208 } 209 public virtual void Start(CancellationToken cancellationToken) { 213 210 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 214 211 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); 212 } 213 public virtual async Task StartAsync() { await StartAsync(CancellationToken.None); } 214 public virtual async Task StartAsync(CancellationToken cancellationToken) { 215 await Task.Factory.StartNew((ct) => Start((CancellationToken)ct), cancellationToken, cancellationToken); 215 216 } 216 217 public virtual void Pause() { -
branches/Async/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
r13349 r15065 61 61 } 62 62 63 public override async Task StartAsync(CancellationToken cancellationToken) {64 await base.StartAsync(cancellationToken);63 public override void Start() { 64 base.Start(); 65 65 CancellationTokenSource = new CancellationTokenSource(); 66 66 67 67 OnStarted(); 68 using (var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationTokenSource.Token, cancellationToken)) { 69 Task task = Task.Factory.StartNew(Run, cts.Token, cts.Token); 70 await task.ContinueWith(t => { 68 Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token); 69 task.ContinueWith(t => { 70 try { 71 t.Wait(); 72 } catch (AggregateException ex) { 71 73 try { 72 t.Wait(); 74 ex.Flatten().Handle(x => x is OperationCanceledException); 75 } catch (AggregateException remaining) { 76 if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]); 77 else OnExceptionOccurred(remaining); 73 78 } 74 catch (AggregateException ex) { 75 try { 76 ex.Flatten().Handle(x => x is OperationCanceledException); 77 } 78 catch (AggregateException remaining) { 79 if (remaining.InnerExceptions.Count == 1) OnExceptionOccurred(remaining.InnerExceptions[0]); 80 else OnExceptionOccurred(remaining); 81 } 82 } 83 CancellationTokenSource.Dispose(); 84 CancellationTokenSource = null; 85 OnStopped(); 86 }); 87 } 79 } 80 CancellationTokenSource.Dispose(); 81 CancellationTokenSource = null; 82 OnStopped(); 83 }); 88 84 } 89 85 … … 110 106 try { 111 107 Run(cancellationToken); 112 } 113 finally { 108 } finally { 114 109 timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed); 115 110 timer.Stop(); -
branches/Async/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs
r13349 r15065 22 22 using System; 23 23 using System.Linq; 24 using System.Threading;25 using System.Threading.Tasks;26 24 using HeuristicLab.Common; 27 25 using HeuristicLab.Core; 28 26 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 27 using HeuristicLab.PluginInfrastructure; 30 using ExecutionContext = HeuristicLab.Core.ExecutionContext;31 28 32 29 namespace HeuristicLab.Optimization { … … 171 168 } 172 169 } 173 public override async Task StartAsync(CancellationToken cancellationToken) {174 await base.StartAsync(cancellationToken);175 if (engine != null) await engine.StartAsync(cancellationToken);170 public override void Start(System.Threading.CancellationToken cancellationToken) { 171 base.Start(cancellationToken); 172 if (engine != null) engine.Start(cancellationToken); 176 173 } 177 174 public override void Pause() {
Note: See TracChangeset
for help on using the changeset viewer.