2023年01月12日
川俣晶の縁側ソフトウェア技術雑記 total 4165 count

C#の非同期ラムダ式がAction型に代入できる

Written By: 川俣 晶連絡先

問題 §

 以下のコードはHello, World!を10回出力することを意図している。しかし、Visual Studio 2022でエラーも警告も何も出ないが、1回しか出力しない。バグがあることは承知しているが、非同期ラムダ式がAction型に代入できることは納得できない。

Action<int> sub = async (n) =>

{

    for (int i = 0; i < n; i++)

    {

        Console.WriteLine("Hello, World!");

        await Task.Delay(1000);

    }

};

Action<int> act = sub;

act(10);

原因 §

不明 (void型を返す非同期ラムダ式と解釈されている可能性はある)

解決 §

ActionではなくFuncを使うとエラーCS4010を受け取ることができる。