Ensure that Task is in a correct initial state before starting it for real
authorJérémie Laval <jeremie.laval@gmail.com>
Wed, 27 Jul 2011 23:36:40 +0000 (19:36 -0400)
committerJérémie Laval <jeremie.laval@gmail.com>
Wed, 27 Jul 2011 23:37:38 +0000 (19:37 -0400)
mcs/class/corlib/System.Threading.Tasks/Task.cs
mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs

index 7ddc573ada64e33c2ad5aef6eee3d2df6549ac8a..8459a8a30c8269273d73bd3f261d01bbb881f857 100644 (file)
@@ -149,6 +149,8 @@ namespace System.Threading.Tasks
                
                public void Start (TaskScheduler scheduler)
                {
+                       if (status >= TaskStatus.WaitingToRun)
+                               throw new InvalidOperationException ("The Task is not in a valid state to be started.");
                        SetupScheduler (scheduler);
                        Schedule ();
                }
index 7a3ebdaae4d5aaf8745bfe11dd974e9f821e6c19..3909fa5cd2f9a4bc66e1fa40d6edf8b0a6ca4582 100644 (file)
@@ -294,6 +294,15 @@ namespace MonoTests.System.Threading.Tasks
 
                        Assert.IsTrue (wasCalled);
                }
+
+               [Test, ExpectedException (typeof (InvalidOperationException))]
+               public void StartFinishedTaskTest ()
+               {
+                       var t = Task.Factory.StartNew (delegate () { });
+                       t.Wait ();
+
+                       t.Start ();
+               }
        }
 }
 #endif