12

インターフェースがあるとしましょう

interface IFoo {
    Task SomeMethodAsync();
}

このインターフェイスを実装したかったのですが、1 つのクラスのメソッドが空白です。

これが生成する警告を受け入れる必要がありますか?

async Task SomeMethodAsync() {}

または、ダミーのタスクを返す必要がありますか?

async Task SomeMethodAsync() { await Task.Run(() => {}); }

それとも別のオプションがありますか?

また、このメソッドを明示的なインターフェイス メソッドとして実装したいと考えています。違いはありますか?

4

3 に答える 3

14

返すメソッドは であるTask必要はありませんasync

次のようなものをお勧めします。

Task IFoo.SomeMethodAsync()
{
  return Task.FromResult(true);
}

これが同期メソッドである場合、メソッド本体は空になるだけだと思います。これはasync空のメソッド本体と同等です。

于 2012-08-28T12:51:25.623 に答える
2

フレームワークがそのようなケースを処理しなければならないことをどのように決定するかだけに依存します。

あなたには、imo、いくつかのオプションがあります:

  • 例外を発生させます(すぐに実行が中断され、実行チェーンのどこかで何らかの方法で処理する必要があります)。

  • return default-value(これはあなたが提供する解決策になる可能性があります: 何もしない空のタスクです。これについて悪いのは、何かを行うことを期待して関数を呼び出すことです。何も通知しませんが、何もしません。いも、これは悪いデザインです。

  • 呼び出し元によってインターセプトされたsome を返すnot-valid-valueため、呼び出し元は何か問題であることを「認識」します。

于 2012-08-28T11:38:23.147 に答える