2017-02-22 18 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源代碼

相關問題