Changeset 13349 for branches/Async/HeuristicLab.Optimization/3.3/Algorithms
- Timestamp:
- 11/23/15 21:18:26 (9 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
r12012 r13349 24 24 using System.Drawing; 25 25 using System.Linq; 26 using System.Threading; 27 using System.Threading.Tasks; 26 28 using HeuristicLab.Collections; 27 29 using HeuristicLab.Common; … … 202 204 Prepare(); 203 205 } 204 public virtual void Start() { 206 public void Start() { 207 StartAsync().Wait(); 208 } 209 public async Task StartAsync() { 210 await StartAsync(new CancellationToken()); 211 } 212 public virtual async Task StartAsync(CancellationToken cancellationToken) { 205 213 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused)) 206 214 throw new InvalidOperationException(string.Format("Start not allowed in execution state \"{0}\".", ExecutionState)); -
branches/Async/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
r11878 r13349 61 61 } 62 62 63 public override void Start() {64 base.Start();63 public override async Task StartAsync(CancellationToken cancellationToken) { 64 await base.StartAsync(cancellationToken); 65 65 CancellationTokenSource = new CancellationTokenSource(); 66 66 67 67 OnStarted(); 68 Task task = Task.Factory.StartNew(Run, cancellationTokenSource.Token, cancellationTokenSource.Token); 69 task.ContinueWith(t => { 70 try { 71 t.Wait(); 72 } catch (AggregateException ex) { 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 => { 73 71 try { 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); 72 t.Wait(); 78 73 } 79 } 80 CancellationTokenSource.Dispose(); 81 CancellationTokenSource = null; 82 OnStopped(); 83 }); 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 } 84 88 } 85 89 … … 106 110 try { 107 111 Run(cancellationToken); 108 } finally { 112 } 113 finally { 109 114 timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed); 110 115 timer.Stop(); -
branches/Async/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs
r12012 r13349 22 22 using System; 23 23 using System.Linq; 24 using System.Threading; 25 using System.Threading.Tasks; 24 26 using HeuristicLab.Common; 25 27 using HeuristicLab.Core; 26 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 29 using HeuristicLab.PluginInfrastructure; 30 using ExecutionContext = HeuristicLab.Core.ExecutionContext; 28 31 29 32 namespace HeuristicLab.Optimization { … … 168 171 } 169 172 } 170 public override void Start() {171 base.Start();172 if (engine != null) engine.Start();173 public override async Task StartAsync(CancellationToken cancellationToken) { 174 await base.StartAsync(cancellationToken); 175 if (engine != null) await engine.StartAsync(cancellationToken); 173 176 } 174 177 public override void Pause() {
Note: See TracChangeset
for help on using the changeset viewer.