2018年02月01日
川俣晶の縁側ソフトウェア技術雑記 total 3366 count

C#で汎用のインターフェースを設計したいが、呼び出し先が同期処理だったり非同期処理だったり一定しない問題

Written By: 川俣 晶連絡先

問題 §

 C#で汎用のインターフェース(C#のinterface機能という意味ではない)を設計したいが、呼び出し先が同期処理だったり非同期処理だったり一定しない。つまり、型が一定しないのでインターフェースが定義できない。

原因 §

 非同期メソッドは戻り値がTaskクラスであり、同期メソッドとは型指定が変化してしまうから。

解決 §

 全て非同期に統一する。同期メソッドは何もしないダミーの非同期メソッドを呼ぶことで強引に非同期扱いに変更する。

 以下は何もしないダミーの非同期メソッドの例。

    static class Dummy

    {

        internal static async Task Nop() => await Task.Delay(0);

    }

感想 §

「オーバーヘッドが大きくてあまりエレガントではないな」

「取りあえず、定義が書けないよりはマシということで」