我从Observable.FromEventPattern获得了一个IObservable,如下所示:
SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);
据我所知,FromEventPattern调用将自动为我生成添加/删除事件处理程序。但是什么时候处理程序实际上被添加/删除?
我假设在订阅IObservable时添加了处理程序。处理订户时,处理程序是否也会自动取消注册?
答案 0 :(得分:4)
只需自己编写一个简单的测试就可以了解Observable
何时使用添加/删除处理程序,只需提供导致副作用的处理程序:
var observable = Observable.FromEvent(
action => Console.WriteLine("Added"),
action => Console.WriteLine("removed"));
Console.WriteLine("Subscribing");
var subscription = observable.Subscribe(unit => { });
Console.WriteLine("disposing");
subscription.Dispose();
Console.WriteLine("done");
打印出来:
Subscribing Added disposing removed done
告诉我们订阅会调用add处理程序,并且处理订阅对象会删除处理程序。
如果您对observable有多个订阅,那么只要您订阅了没有先前订阅的observable,就会添加处理程序,并且只有处理订阅才会删除处理程序(如果它是最后一个订阅者) 。通过修改测试以创建多个订阅然后将它们全部处理,可以看出这一点。