Why can Task.WhenAll take any number of Task arguments?
<p>While reviewing Async and Await, I noticed that Task.WhenAll could be called with any number of parameters:</p>

<pre><code>Threading.Tasks.Task.WhenAll(New Threading.Tasks.Task(New Action(Sub() Console.WriteLine("Hello"))),
                             New Threading.Tasks.Task(New Action(Sub() Console.WriteLine("Hello"))),
                             New Threading.Tasks.Task(New Action(Sub() Console.WriteLine("Hello"))),
                             New Threading.Tasks.Task(New Action(Sub() Console.WriteLine("Hello"))),
                             New Threading.Tasks.Task(New Action(Sub() Console.WriteLine("Hello"))))
</code></pre>

<p>Why does this work, but methods like Array.Reverse do not allow you to pass any number of parameters?</p>