Task DoTearDown(IDispatcherService service, IUIAwaiter awaiter, IBenchmarkItem target, object uiControl) { return(Task.Factory.StartNew(() => { using (var token = awaiter.BeginAwaiting(() => target.TearDown(uiControl))) service.BeginInvoke(() => token.Run()); running--; }, TaskCreationOptions.LongRunning)); }
Task <long> DoBehcmark(IDispatcherService service, IUIAwaiter awaiter, IBenchmarkItem target) { return(Task.Factory.StartNew <long>(() => { using (var token = awaiter.BeginAwaiting(() => target.Benchmark())) { service.BeginInvoke(() => token.Run()); return token.ElapsedMilliseconds; } }, TaskCreationOptions.LongRunning)); }
Task <long> DoCycle(IDispatcherService dispatcher, IUIAwaiter awaiter, IBenchmarkItem target, object uiControl) { return(DoSetup(dispatcher, awaiter, target, uiControl) .ContinueWith(_ => DoBehcmark(dispatcher, awaiter, target).Result) .ContinueWith(run => { DoTearDown(dispatcher, awaiter, target, uiControl).Wait(); return run.Result; })); }