Мне интересно, что такое "лучшая практика", когда вы просите обработчика событий отказаться от подписки на себя после стрельбы один раз.
В контексте, это моя ситуация. Пользователь вошел в систему и находится в состоянии готовности для обработки рабочих элементов. Они получают рабочий элемент, обрабатывают его, а затем снова возвращаются к готовому. На этом этапе они могут захотеть сказать, что они недоступны для большего количества рабочих элементов, но в любом случае их отправляют. То, что я хочу сделать, позволяет пользователю "ставить в очередь" "Я недоступен", как только эта операция станет возможной.
public event SomeHandler StateChanged = delegate {};
public void QueueNotAvailable()
{
StateChanged += (s,e) => {
if (e.CanGoNotAvailable) {
someObject.NotAvailable();
StateChanged -= {thishandler};
}
}
}
В моих целях, если отдельный поток запускает события, и этот обработчик работает дважды, это не проблема. Прием одной и той же функции очень близко друг к другу является приемлемым. Я просто не хочу, чтобы он срабатывал каждый раз, когда операция разрешена.