Ver código fonte

[corlib] Improve CancellationTokenSource test

Get rid of the Thread.Sleep calls that are prone to timing issues.
Alexander Köplinger 10 anos atrás
pai
commit
bf5947a0fd

+ 8 - 4
mcs/class/corlib/Test/System.Threading/CancellationTokenSourceTest.cs

@@ -55,8 +55,10 @@ namespace MonoTests.System.Threading
 		{
 			int called = 0;
 			var cts = new CancellationTokenSource (TimeSpan.FromMilliseconds (20));
-			cts.Token.Register (() => called++);
-			Thread.Sleep (50);
+			var mre = new ManualResetEvent (false);
+			cts.Token.Register (() => { called++; mre.Set (); });
+
+			Assert.IsTrue (mre.WaitOne (1000), "Not called in 1000ms");
 			Assert.AreEqual (1, called, "#1");
 		}
 
@@ -89,10 +91,12 @@ namespace MonoTests.System.Threading
 		{
 			int called = 0;
 			var cts = new CancellationTokenSource ();
-			cts.Token.Register (() => called++);
+			var mre = new ManualResetEvent (false);
+			cts.Token.Register (() => { called++; mre.Set (); });
 			cts.CancelAfter (50);
 			cts.Dispose ();
-			Thread.Sleep (100);
+
+			Assert.IsFalse (mre.WaitOne (100), "Shouldn't have been called");
 			Assert.AreEqual (0, called, "#1");
 		}