特定のイベントに複数のサブスクライバが存在しないようにしたい。私の特別なケースでは、複数の加入者を持つことは理にかなっていませんし、そうであればいくつかの悪質な問題が発生する可能性があります。イベントに複数のサブスクライバが存在しないようにする
サイドノート:特に、私のハンドラー(サブスクライバー)はasync
でなければならず、イベントを起こすときにはawait
にしなければなりません。なぜなら、これはネットワークソケットラッピングクラスで、TextReceivedイベントを発生させ、ユーザ(サブスクライバ)が最後のTextReceivedイベントの処理を終了する前に、ソケットからそれ以上のデータを読み込みたくないからです。ユーザは通常、ソケットに何らかの応答を書き込み、複数の機内コールバックが衝突を引き起こします)。たぶん、このケースは別の方法(非同期イベントなし)で解決できる可能性があります。間違った問題を解決しようとしています。もしそうなら、どうですか?
これは私が思いついた解決策ですが、それが唯一の選択肢であるのか、それともさらに単純化できるのかは疑問です。
は、これは私のコードです:
private TextReceivedAsyncHandler _textReceivedAsync;
public event TextReceivedAsyncHandler TextReceivedAsync
{
add
{
if (_textReceivedAsync != null)
throw new MultipleSubscribersNotAllowedException(eventName: nameof(TextReceivedAsync));
_textReceivedAsync = value;
}
remove
{
_textReceivedAsync = null;
}
}
これは、複数の加入者を制限するための適切な最短の方法、またはあなたは、よりエレガントな解決策を提案することができますか?イベントの代わりにパブリックデリゲートプロパティを使用することを考えましたが、デリゲートがマルチキャストであるため問題は解決しません。
私はあなたのアプローチに何か問題があるかわかりません。それ以上の制御が必要な場合は、オブザーバーパターンを自分で実装するか(非同期にするか)、代わりにコールバックプロパティを作成します(より少ないSOLID)。 –