Bladeren bron

Check that CancellationToken coming from OperationCanceledException isn't None. Fix #472.

Jérémie Laval 14 jaren geleden
bovenliggende
commit
c764bfd4fa

+ 1 - 1
mcs/class/corlib/System.Threading.Tasks/Task.cs

@@ -410,7 +410,7 @@ namespace System.Threading.Tasks
 				try {
 					InnerInvoke ();
 				} catch (OperationCanceledException oce) {
-					if (oce.CancellationToken == token)
+					if (token != CancellationToken.None && oce.CancellationToken == token)
 						CancelReal ();
 					else
 						HandleGenericException (oce);

+ 12 - 0
mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs

@@ -319,6 +319,18 @@ namespace MonoTests.System.Threading.Tasks
 			var t = new Task (() => { });
 			t.Dispose ();
 		}
+
+		[Test]
+		public void ThrowingUnrelatedCanceledExceptionTest ()
+		{
+			Task t = new Task (() => {
+				throw new TaskCanceledException ();
+			});
+
+			t.RunSynchronously ();
+			Assert.IsTrue (t.IsFaulted);
+			Assert.IsFalse (t.IsCanceled);
+		}
 	}
 }
 #endif