fre*_*red 1 .net c# reactive-programming system.reactive
我从 Observable.FromEventPattern 得到一个 IObservable,如下所示:
SomeObject target = new SomeObject();
string eventName = "SomeEvent";
IObservable<T> obs = Observable.FromEventPattern<T>(target, eventName);
Run Code Online (Sandbox Code Playgroud)
据我了解,FromEventPattern 调用将自动为我生成添加/删除事件处理程序。但是处理程序何时真正被添加/删除?
我假设在订阅 IObservable 时添加了处理程序。处理订阅者时,处理程序是否也会自动取消注册?
自己编写一个简单的测试来查看何时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");
Run Code Online (Sandbox Code Playgroud)
这打印出来:
订阅 添加 处置 移除 完毕
告诉我们订阅会调用添加处理程序,而处理订阅对象会删除处理程序。
如果您对 observable 有多个订阅,那么每当您订阅一个没有先前订阅的 observable 时都会添加处理程序,并且如果订阅是最后一个剩余的订阅者,则处理订阅只会删除处理程序。这可以通过修改测试以创建多个订阅然后将它们全部处理掉来看到。
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |