gpt4 book ai didi

c# - ArgumentException 不会在 Task.WaitAll(new Task[0]) 上抛出

转载 作者:行者123 更新时间:2023-11-30 23:15:39 29 4
gpt4 key购买 nike

当我阅读有关 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]); 时,它会毫无异常(exception)地继续运行。

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

我理解 Task.WhenAll(new Task[0]) 做同样的事情,当然除了返回一个任务。这feature was sometimes used to get a completed task , 在 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 }

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

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 源代码

关于c# - ArgumentException 不会在 Task.WaitAll(new Task[0]) 上抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42389389/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com