当我在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的新解决方案,它的行为方式相同。
答案 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源代码