Task.WaitAll(new Task[0]) 没有抛出 ArgumentException

ArgumentException isn't thrown on Task.WaitAll(new Task[0])

当我阅读有关 Task.WaitAll(params Task[] tasks) 的 MSDN 文档时,它说它在以下情况下抛出 ArgumentException:

The tasks argument contains a null element.

-or-

The tasks argument is an empty array.

但是当我调用 Task.WaitAll(new Task[0]); 时,它毫无例外地继续运行。

我是不是误解了文档,或者这只是一个错误(或过时的信息)?

我明白 Task.WhenAll(new Task[0]) 做同样的事情,当然除了返回一个任务。此 feature was sometimes used to get a completed task, before Task.CompletedTask 是在 .NET 4.6 中引入的。

我真的很高兴 Task.WaitAll() 看起来是这样的,所以我不必将空数组视为特例,但我仍然想确保我理解正确。

顺便说一下,我是 运行 我在 4.5.2 上的应用程序。但我刚刚针对 4.6.1 做了一个新的解决方案,它的行为方式相同。

这似乎是一份错误的文件。根据源代码(Can be found here 或通过 Resharper) ArgumentException 仅在以下情况下引发:

参数是 null:

5043     if (tasks == null)
5044     {
5045        throw new ArgumentNullException("tasks");
5046     }

或者数组的其中一个元素为“空”:

5070    // Collects incomplete tasks in "waitedOnTaskList"
5071    for (int i = tasks.Length - 1; i >= 0; i--)
5072    {
5073        Task task = tasks[i];
5074
5075        if (task == null)
5076        {
5077            throw new ArgumentException(Environment.GetResourceString("Task_WaitMulti_NullTask"), "tasks");
5078        }

我在代码中找不到任何空数组检查。

PS: 我在看 .NET Framework 4.6.2 源代码