私は、複数のデリゲートがイベント(マルチキャストデリゲート)に添付されているシナリオを持っています。複数のデリゲートが添付され、1つが失敗する
これらのメソッド/代理人(存在する場合)を呼び出すシーケンスは何ですか?
デリゲートに添付されたメソッドの1つが例外をスローした場合。
- イベントはさらに処理を停止しますか?
- 残りのメソッドは接続されますか????
このシナリオをどのように処理するかについてはっきりしていません。
ご協力いただきまして誠にありがとうございます。
私は、複数のデリゲートがイベント(マルチキャストデリゲート)に添付されているシナリオを持っています。複数のデリゲートが添付され、1つが失敗する
これらのメソッド/代理人(存在する場合)を呼び出すシーケンスは何ですか?
デリゲートに添付されたメソッドの1つが例外をスローした場合。
このシナリオをどのように処理するかについてはっきりしていません。
ご協力いただきまして誠にありがとうございます。
はい、例外をスローするイベントハンドラはさらに実行を停止し、例外は呼び出しスタックを伝播します。これは、それ以降のイベントハンドラはが呼び出されないことを意味します。各イベントハンドラがイベントを発生させるクラスで呼び出されることを保証したい場合は、MulticastDelegate
内の各デリゲートを反復処理し、try-catchブロック内で個別に呼び出す必要があります。もちろん、簡単な解決策は、ハンドラ内で発生する可能性のあるエラーをキャッチすることだけです。ほとんどの場合、これをお勧めします。
マルチキャストデリゲートのメソッドは任意の順序で呼び出されます。 (通常、デリゲートに追加された順序で呼び出されますが、これは必ずしも真実ではありません)。したがって、プログラマーは呼び出し順序に依存してはいけません。
delegatename.GetInvocationList()を使用してマルチキャストデリゲートのすべてのメソッドをループし、ループ内でtry catchブロックを使用して例外をキャッチし、次のメソッド呼び出しを続行する必要があります。
一部の例外を除いて、残りのメソッドが呼び出されるようにする方法については、articleを参照してください。