Skip to content

Commit e212a7b

Browse files
authored
Wait on task instead of while loop with 1ms delay. (#790)
Optimize waiting on tests to finish in ThreadlessXunitTestRunner. Instead of while loop with checking on ManualResetEvent every 1ms, use TaskCompletionSource triggered from DelegatingExecutionSummarySink completed callback.
1 parent eaaeffe commit e212a7b

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

src/Microsoft.DotNet.XHarness.TestRunners.Xunit/ThreadlessXunitTestRunner.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ public static async Task<int> Run(string assemblyFileName, bool printXml, XunitF
4242
var discoverer = new ThreadlessXunitDiscoverer(assemblyInfo, new NullSourceInformationProvider(), discoverySink);
4343

4444
discoverer.FindWithoutThreads(includeSourceInformation: false, discoverySink, discoveryOptions);
45-
discoverySink.Finished.WaitOne();
4645
var testCasesToRun = discoverySink.TestCases.Where(filters.Filter).ToList();
4746
Console.WriteLine($"Discovered: {assemblyFileName} (found {testCasesToRun.Count} of {discoverySink.TestCases.Count} test cases)");
4847

49-
var summarySink = new DelegatingExecutionSummarySink(testSink, () => false, (completed, summary) => { Console.WriteLine($"{Environment.NewLine}=== TEST EXECUTION SUMMARY ==={Environment.NewLine}Total: {summary.Total}, Errors: 0, Failed: {summary.Failed}, Skipped: {summary.Skipped}, Time: {TimeSpan.FromSeconds((double)summary.Time).TotalSeconds}s{Environment.NewLine}"); });
48+
var summaryTaskSource = new TaskCompletionSource<ExecutionSummary>();
49+
var summarySink = new DelegatingExecutionSummarySink(testSink, () => false, (completed, summary) => summaryTaskSource.SetResult(summary));
5050
var resultsXmlAssembly = new XElement("assembly");
5151
var resultsSink = new DelegatingXmlCreationSink(summarySink, resultsXmlAssembly);
5252

@@ -63,10 +63,8 @@ public static async Task<int> Run(string assemblyFileName, bool printXml, XunitF
6363

6464
controller.RunTests(testCasesToRun, resultsSink, testOptions);
6565

66-
while (!resultsSink.Finished.WaitOne(0))
67-
{
68-
await Task.Delay(1);
69-
}
66+
var summary = await summaryTaskSource.Task;
67+
Console.WriteLine($"{Environment.NewLine}=== TEST EXECUTION SUMMARY ==={Environment.NewLine}Total: {summary.Total}, Errors: 0, Failed: {summary.Failed}, Skipped: {summary.Skipped}, Time: {TimeSpan.FromSeconds((double)summary.Time).TotalSeconds}s{Environment.NewLine}");
7068

7169
if (printXml)
7270
{

0 commit comments

Comments
 (0)