Здравствуйте, Jack128, Вы писали:
J>ну ты сохранил подписку в глобальной переменной. точно так же и лямбду можно сохранить. в чем отличие ?
Лямбду легко забыть сохранить и каждый раз создавать новую локальную переменную. Реальный баг

А вот объект подписки не сохранив не отпишешься.
Здравствуйте, _NN_, Вы писали:
_NN>Даже в старом WinAPI был второй вариант.
_NN>Кто же все таки посчитал, что первый подход лучше ?
логически, вариант с
MySubscription = SomeEvent.Subscribe(MyHandler)
MySubscription.Dispose();
абсолютно эквивалентен
SomeEvent.Subscribe(MyHandler)
SomeEvent.Unsubscribe(MyHandler);
т.к. внутри себя объект "подписки" будет вызывать Unsubscribe. Оригинальный myHandler все равно где-то должен храниться.
Т.е. это не более чем синтаксический сахар, причем не самый удобный. Если хочется, его можно реализовать быстро, но фишка в том, что смысла особого нет.
Вариант с объектами-подписками означает, что подписки надо где-то хранить. Это автоматически влечет проблемы с подписчиками, желающими остаться инвариантами и/или подписываемые к более чем одному источнику. Причем, не стоит забывать, что очень часто, если не сказать "обычно", подписчик даже и не знает, что его подписали-отписали. В таких случаях явный
SubjectOne.Unsubscribe(Handler);
SubjectX.Unsubscribe(Handler);
очевидно предпочтительнее манипуляций с объектами-подписками, особенно если отписаться нужно не от всех источников.