【发布时间】:2020-12-28 17:48:32
【问题描述】:
我相信一旦 C# 能够判断结果,它就会停止评估 if 语句条件。比如:
if ( (1 < 0) && check_something_else() )
// this will not be called
由于条件(1 < 0) 的计算结果为false,因此无法满足&& 条件,并且不会调用check_something_else()。
C# 如何评估带有异步函数的 if 语句?是不是要等两个人都回来?比如:
if( await first_check() && await second_check() )
// ???
这会短路吗?
【问题讨论】:
-
if和await都不影响短路。async不会影响语言的行为,除了允许使用await,等待已经执行的异步操作而不会阻塞。 -
Operator &&文档的哪一部分让您认为它可以永远跳过短路? -
@IanKemp:我认为你需要重新阅读 Alexei 所说的话......
-
但是,短路和布尔逻辑是不一样的。 (
&& false) 也只能计算为 false,但 C、C#、C++ 已决定短路仅基于第一个参数。 -
短路与
if无关。&&和||无论在哪里使用都会执行短路,例如some_var = <expression1> && <expression2>
标签: c# if-statement async-await short-circuiting