3

スレッド A とスレッド B の 2 つのスレッドがあるとします。スレッド A にイベントを登録し、スレッド B から呼び出します。イベントはどのスレッドで実行されますか?

上記が当てはまらない特別なシナリオはありますか?

また、ロックを使用せずにクラスをスレッドセーフにする方法。

前もって感謝します

4

1 に答える 1

4

明示的なアクションを実行しない限り、イベント ハンドラーは、イベントを発生させたスレッドで呼び出されます。通常、「イベントを発生させる」ことは、同じスレッドでの同期操作であるデリゲートを呼び出すことです。

また、ロックを使用せずにクラスをスレッドセーフにする方法。

それに答えるのに十分な情報はほとんどありません。理想的には別の質問になります。しかし、その別の質問をする前に、「スレッドセーフ」とは何を意味するのかを自問する必要があります。それは、人によってさまざまなことを意味する可能性があります。詳細については、このトピックに関する Eric Lippert のブログ投稿を参照してください。

(特に、イベントについて考えている場合は、イベントが発生している間に1 つのスレッドがイベントをサブスクライブまたはサブスクライブ解除する可能性を考慮してください。何が起こる必要がありますか?)

于 2013-05-11T09:53:01.753 に答える