private void RunTestsSequentially(ITestEventListener listener, TestFilter filter, List <TestEngineResult> results, bool disposeRunners)
 {
     foreach (ITestEngineRunner runner in Runners)
     {
         var task = new TestExecutionTask(runner, listener, filter, disposeRunners);
         task.Execute();
         LogResultsFromTask(task, results);
     }
 }
        private static void LogResultsFromTask(TestExecutionTask task, List <TestEngineResult> results)
        {
            var result = task.Result;

            if (result != null)
            {
                results.Add(result);
            }

            //if (task.UnloadException != null)
            //{
            //    unloadExceptions.Add(task.UnloadException);
            //}
        }
        private void RunTestsInParallel(ITestEventListener listener, TestFilter filter, List <TestEngineResult> results, bool disposeRunners)
        {
            var workerPool = new ParallelTaskWorkerPool(LevelOfParallelism);
            var tasks      = new List <TestExecutionTask>();

            foreach (ITestEngineRunner runner in Runners)
            {
                var task = new TestExecutionTask(runner, listener, filter, disposeRunners);
                tasks.Add(task);
                workerPool.Enqueue(task);
            }

            workerPool.Start();
            workerPool.WaitAll();

            foreach (var task in tasks)
            {
                LogResultsFromTask(task, results);
            }
        }