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

时间:2017-02-22 11:01:23

标签: c# task msdn

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

  

tasks 参数包含null元素。

     

-OR -

     

tasks 参数是一个空数组。

但是当我呼叫Task.WaitAll(new Task[0]);时,它会毫无例外地传递。

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

我理解Task.WhenAll(new Task[0])做同样的事情,除了当然要返回任务。在.NET 4.6中引入feature was sometimes used to get a completed task之前的Task.CompletedTask

我很高兴Task.WaitAll()似乎表现得这样,所以我不必将空数组视为特殊情况,但我仍然希望确保我理解正确。

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

1 个答案:

答案 0 :(得分:2)

它似乎是一个错误的文档。根据源代码(Can be found here或通过Resharper) foreach (FacebookPermissionModel permissionResult in result.SelectMany(x => x.data).Where(y => y.status == "granted")) { if (RequiredPermissions.ContainsKey(permissionResult.permission)) { RequiredPermissions[permissionResult.permission].granted = true; { } 仅在以下时间提出:

参数为ArgumentException

null

或者数组的一个元素是`null':

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

我无法在代码中找到任何对空数组的检查。

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