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;
     }));
 }