- Timestamp:
- 11/23/15 21:18:26 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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();
Note: See TracChangeset
for help on using the changeset viewer.