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 源代码
当我阅读有关 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 源代码