2017-02-22 17 views
2

当我在阅读Task.WaitAll(params Task[] tasks) MSDN文档它说当它引发ArgumentException:的ArgumentException不是扔在Task.WaitAll(新任务[0])

任务参数包含null元素。

- 或 -

任务参数为空数组。

但是当我打电话给Task.WaitAll(new Task[0]);它传递没有任何例外。

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

我明白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制定了一个新的解决方案,它的行为方式也是一样的。

+2

[VS 10](https://msdn.microsoft.com/en-us/library/dd270695(V之间当然改变的文档= vs.100).aspx)和[VS 11](https://msdn.microsoft.com/en-us/library/dd270695(v = vs.110).aspx) - 特别是它增加了'tasks参数是一个空阵列文本 - 有趣。我的钱是文档错误... –

回答

2

它似乎是一个错误的文档。根据源代码(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源代码

相关问题