Гарантируя, что мы подписываемся только один раз на событие - PullRequest
5 голосов
/ 13 апреля 2011

Вот мой вопрос: если я хочу убедиться, что обработчик подписан только один раз, правильно ли подписываться таким образом:

x.Event -= Handler;
x.Event += Handler;

Идея "Попробуйте отписаться, даже если мы былине подписан », тогда подписывайтесь, когда мы на 100% не подписаны.

Правильна ли эта идея, а если нет - почему?Погуглил его какое-то время, кажется, не могу найти ответ сам.

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

То, что у вас есть, не будет выдавать никаких исключений, поэтому оно будет работать как задумано - но это не очень понятный код.

Я бы очень предпочел вместо этого тест с логическим флагом:

if(!subscribed) {
    x.Event += Handler;
}
4 голосов
/ 13 апреля 2011

Пока вы делаете это везде вы подписываетесь на этот обработчик, все должно быть в порядке.Но если вы подписываетесь 100 раз, а затем запускаете этот код, у вас все равно останется 100 подписок.

(кстати, я предполагаю, что вы используете только один поток.состояние гонки, если два потока выполняют этот код одновременно ... они оба могут отменить подписку и затем подписаться, оставив две активные подписки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...