C#はawaitでif文の短絡的な評価を行うか?
2023-09-27 04:16:10
質問
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() )
// ???
これが短絡的になることはないのでしょうか?
どのように解決するのですか?
これは超簡単な確認方法です。
このコードを試してみてください。
async Task Main()
{
if (await first_check() && await second_check())
{
Console.WriteLine("Here?");
}
Console.WriteLine("Tested");
}
Task<bool> first_check() => Task.FromResult(false);
Task<bool> second_check() { Console.WriteLine("second_check"); return Task.FromResult(true); }
"Tested"と出力され、それ以外は何も出力されません。
関連
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] Pythonはショートカットに対応していますか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み】非同期プログラミングとマルチスレッドの違いは何ですか?
-
[解決済み] 論理演算子の短絡は必須ですか?また、評価順序は?
-
[解決済み] JavaScriptには "Short-circuit "評価があるのか?
-
PHPには短絡判定がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する