如何在Observable.FromEventPattern中使用的事件中注册/取消注册处理程序?

时间:2014-10-07 17:00:26

标签: c# .net system.reactive reactive-programming

我从Observable.FromEventPattern获得了一个IObservable,如下所示:

SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);

据我所知,FromEventPattern调用将自动为我生成添加/删除事件处理程序。但是什么时候处理程序实际上被添加/删除?

我假设在订阅IObservable时添加了处理程序。处理订户时,处理程序是否也会自动取消注册?

1 个答案:

答案 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,就会添加处理程序,并且只有处理订阅才会删除处理程序(如果它是最后一个订阅者) 。通过修改测试以创建多个订阅然后将它们全部处理,可以看出这一点。