From 1389dfea52fed0f3d8d1b80dd0a8080b375ed6e4 Mon Sep 17 00:00:00 2001 From: BrennanConroy Date: Tue, 5 May 2020 15:20:39 -0700 Subject: [PATCH 1/3] Deflake TimeAwaitable finalizer test --- .../csharp/Client/test/UnitTests/TimerAwaitableTests.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs index b8d7f1769946..1d57e90ff92a 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs @@ -19,8 +19,10 @@ public void FinalizerRunsIfTimerAwaitableReferencesObject() var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); UseTimerAwaitableAndUnref(tcs); + var timeout = tcs.Task.OrTimeout(); + // Make sure it *really* cleans up - for (int i = 0; i < 5 && !tcs.Task.IsCompleted; i++) + while (!timeout.IsCompleted) { GC.Collect(); GC.WaitForPendingFinalizers(); From 807f23eb558f79f66539c90c131b2091189ec913 Mon Sep 17 00:00:00 2001 From: BrennanConroy Date: Tue, 5 May 2020 17:38:00 -0700 Subject: [PATCH 2/3] fb --- .../csharp/Client/test/UnitTests/TimerAwaitableTests.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs index 1d57e90ff92a..37fbd900bf31 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs @@ -29,7 +29,7 @@ public void FinalizerRunsIfTimerAwaitableReferencesObject() } // Make sure the finalizer runs - Assert.True(tcs.Task.IsCompleted); + Assert.True(timeout.IsCompletedSuccessfully); } [MethodImpl(MethodImplOptions.NoInlining)] @@ -45,12 +45,11 @@ public class ObjectWithTimerAwaitable { private readonly TimerAwaitable _timer; private readonly TaskCompletionSource _tcs; - private int _count; public ObjectWithTimerAwaitable(TaskCompletionSource tcs) { _tcs = tcs; - _timer = new TimerAwaitable(TimeSpan.Zero, TimeSpan.FromSeconds(1)); + _timer = new TimerAwaitable(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(1)); _timer.Start(); } @@ -60,7 +59,6 @@ public async Task Start() { while (await _timer) { - _count++; } } } From 00225c79fa09cae1c3ca7b80c5730e3ec1e0cd16 Mon Sep 17 00:00:00 2001 From: BrennanConroy Date: Tue, 5 May 2020 17:45:14 -0700 Subject: [PATCH 3/3] no loop --- .../Client/test/UnitTests/TimerAwaitableTests.cs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs index 37fbd900bf31..2d61118186a3 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs @@ -14,22 +14,16 @@ public class TimerAwaitableTests { [Fact] [QuarantinedTest] - public void FinalizerRunsIfTimerAwaitableReferencesObject() + public async Task FinalizerRunsIfTimerAwaitableReferencesObject() { var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); UseTimerAwaitableAndUnref(tcs); - var timeout = tcs.Task.OrTimeout(); - - // Make sure it *really* cleans up - while (!timeout.IsCompleted) - { - GC.Collect(); - GC.WaitForPendingFinalizers(); - } + GC.Collect(); + GC.WaitForPendingFinalizers(); // Make sure the finalizer runs - Assert.True(timeout.IsCompletedSuccessfully); + await tcs.Task.OrTimeout(); } [MethodImpl(MethodImplOptions.NoInlining)] @@ -49,7 +43,7 @@ public class ObjectWithTimerAwaitable public ObjectWithTimerAwaitable(TaskCompletionSource tcs) { _tcs = tcs; - _timer = new TimerAwaitable(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(1)); + _timer = new TimerAwaitable(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(1)); _timer.Start(); }