Task.WaitAll() - 没有参数

3

使用System.Threading.Tasks.Task.WaitAll(),我可以看到我应该使用此方法的可用参数

可以在这里看到,但是当在Visual Studio中编写时,我甚至可以不使用任何参数来调用该方法:

Task.WaitAll();

为什么在这个特定的方法中,缺少参数时不会在IDE中显示为语法错误呢?您能否解释一下原因?

2个回答

13

这个方法的完整定义是

public static void WaitAll(params Task[] tasks)

单词params表示该方法接受可变数量的参数。同时也明确允许0个参数。

不用说,以这种方式调用方法时它是没有效果的。


7
为什么?对于许多 params 的实现,不传递参数是一个合理的选择,例如 Console.WriteLine()。在这种情况下,不传递参数既没有意义(也不会出问题)。 - Servy
@Servy:在C#中,至少有几种情况下编译器会警告你确保这是你真正想要的。这不是错误,警告有时可以显示意外的错误。 - user195488
2
@0A0D 是的,我知道,当添加编译器警告时,他们会非常努力地确保代码存在错误的概率非常高。但在这种情况下,这种概率并不是很高。这更像是例外而不是规则。此外,请注意使用此代码的负面影响非常小,这也是不添加编译器警告的一个观点。你真的想每次写 Console.WriteLine() 时都看到编译器警告吗?我知道我不想。 - Servy
@Servy:说得对,但是Console.WriteLine()实际上会写入一个新行,因为它将一个新行附加到传递的参数的末尾。而Task.WaitAll()则什么也不做。它只检查params是否大于0,如果是,则返回。要完整,它确实需要一个显式的可变长度参数。我真的看不出有必要调用Task.WaitAll()。 - user195488
2
@0A0D 所以您想将Task.WaitAll特殊处理为一种方法?有什么意义呢?到底获得了什么价值?您既没有防止任何重大的负面影响,也没有防止对大量人产生轻微负面影响。完全不值得。如果有积极作用,它要么具有可以忽略的净值,要么根本没有积极作用。 - Servy
显示剩余2条评论

3
这个方法是过载的。其中一种形式如下:
public static void WaitAll(
    params Task[] tasks
)

params参数可以接受零个或多个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接