diff --git a/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs b/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs index a64dc00842991..89fab991d7348 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs @@ -6305,8 +6305,14 @@ public static Task WhenAny(IEnumerable tasks) return WhenAny(taskArray); } + int count = taskCollection.Count; + if (count <= 0) + { + ThrowHelper.ThrowArgumentException(ExceptionResource.Task_MultiTaskContinuation_EmptyTaskList, ExceptionArgument.tasks); + } + int index = 0; - taskArray = new Task[taskCollection.Count]; + taskArray = new Task[count]; foreach (Task task in tasks) { if (task == null) ThrowHelper.ThrowArgumentException(ExceptionResource.Task_MultiTaskContinuation_NullTask, ExceptionArgument.tasks); diff --git a/src/libraries/System.Threading.Tasks/tests/MethodCoverage.cs b/src/libraries/System.Threading.Tasks/tests/MethodCoverage.cs index e696a38cf924e..923875f6e43ce 100644 --- a/src/libraries/System.Threading.Tasks/tests/MethodCoverage.cs +++ b/src/libraries/System.Threading.Tasks/tests/MethodCoverage.cs @@ -188,6 +188,20 @@ public static void Task_WhenAny_TwoTasks_InvalidArgs_Throws() AssertExtensions.Throws("task2", () => Task.WhenAny(Task.FromResult(2), null)); } + [Fact] + public static void Task_WhenAny_NoTasks_Throws() + { + AssertExtensions.Throws("tasks", () => { Task.WhenAny(new Task[0]); }); + AssertExtensions.Throws("tasks", () => { Task.WhenAny(new List()); }); + AssertExtensions.Throws("tasks", () => { Task.WhenAny(EmptyIterator()); }); + + AssertExtensions.Throws("tasks", () => { Task.WhenAny(new Task[0]); }); + AssertExtensions.Throws("tasks", () => { Task.WhenAny(new List>()); }); + AssertExtensions.Throws("tasks", () => { Task.WhenAny(EmptyIterator>()); }); + + static IEnumerable EmptyIterator() { yield break; } + } + [Fact] public static async Task Task_WhenAny_TwoTasks_OnePreCompleted() {