Parcourir la source

Implement proper ctor parameter checking

Jérémie Laval il y a 14 ans
Parent
commit
b21a860ddf

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

@@ -86,8 +86,12 @@ namespace System.Threading.Tasks
 		}
 		
 		public Task (Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
-			: this (null, null, cancellationToken, creationOptions)
+			: this (null, null, cancellationToken, creationOptions, current)
 		{
+			if (action == null)
+				throw new ArgumentNullException ("action");
+			if (creationOptions > TaskCreationOptions.AttachedToParent || creationOptions < TaskCreationOptions.None)
+				throw new ArgumentOutOfRangeException ("creationOptions");
 			this.simpleAction = action;
 		}
 		
@@ -108,7 +112,10 @@ namespace System.Threading.Tasks
 		public Task (Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
 			: this (action, state, cancellationToken, creationOptions, current)
 		{
-
+			if (action == null)
+				throw new ArgumentNullException ("action");
+			if (creationOptions > TaskCreationOptions.AttachedToParent || creationOptions < TaskCreationOptions.None)
+				throw new ArgumentOutOfRangeException ("creationOptions");
 		}
 
 		internal Task (Action<object> action,

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

@@ -34,6 +34,7 @@ namespace System.Threading.Tasks
 	{
 		TResult value;
 		static TaskFactory<TResult> factory = new TaskFactory<TResult> ();
+		static readonly Action<object> emptyAction = delegate {};
 		
 		Func<object, TResult> function;
 		object state;
@@ -99,7 +100,7 @@ namespace System.Threading.Tasks
 		}
 
 		public Task (Func<object, TResult> function, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
-			: base (null, state, cancellationToken, creationOptions)
+			: base (emptyAction, state, cancellationToken, creationOptions)
 		{
 			this.function = function;
 			this.state = state;