如何将处理程序注册/注销到Observable.FromEventPattern中使用的事件

本文关键字:FromEventPattern Observable 事件 注销 处理 程序 注册 | 更新日期: 2023-09-27 18:25:47

我正在从Observable.FromEventPattern获得一个IOobservable,如下所示:

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

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

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

如何将处理程序注册/注销到Observable.FromEventPattern中使用的事件

只需自己编写一个简单的测试,就可以很容易地通过简单地提供自己的导致副作用的处理程序来查看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");

打印出来:

订阅已添加处置已删除完成

告诉我们订阅调用添加处理程序,并处理订阅对象将删除处理程序。

如果您对可观察对象有多个订阅,那么每当您订阅以前没有订阅的可观察对象时,都会添加处理程序,而处理订阅只会在处理程序是最后一个剩余订阅时删除它。这可以通过修改测试以创建多个订阅,然后将其全部处理来实现。