問題 §
C#で汎用のインターフェース(C#のinterface機能という意味ではない)を設計したいが、呼び出し先が同期処理だったり非同期処理だったり一定しない。つまり、型が一定しないのでインターフェースが定義できない。
原因 §
非同期メソッドは戻り値がTaskクラスであり、同期メソッドとは型指定が変化してしまうから。
解決 §
全て非同期に統一する。同期メソッドは何もしないダミーの非同期メソッドを呼ぶことで強引に非同期扱いに変更する。
以下は何もしないダミーの非同期メソッドの例。
static class Dummy
{
internal static async Task Nop() => await Task.Delay(0);
}
感想 §
「オーバーヘッドが大きくてあまりエレガントではないな」
「取りあえず、定義が書けないよりはマシということで」