2017-02-22 23 views
2

Когда я прочитал в документации MSDN на Task.WaitAll(params Task[] tasks) он говорит, что бросает ArgumentException когда:ArgumentException не выброшены на Task.WaitAll (новый Task [0])

задачи аргумент содержит нулевой элемент ,

-или-

задачи аргумента является пустой массив.

Но когда я звоню 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 (ст = 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 исходный код

Смежные вопросы