繁体   English   中英

接收-取消订阅活动

[英]Rx - unsubscribing from events

我有一个INotifyPropertyChanged对象Foo。 我使用Rx的FromEvent方法将Foo变成可观察的事件流:

var myFoo = new Foo();
var eventStream = Observable.FromEvent<PropertyChangedEventArgs>(myFoo, "PropertyChanged");

现在,我想收听更改的特定属性,如果.Progress == 100,请退订:

eventStream
   .Where(e => myFoo.Progress == 100)
   .Subscribe(OnFooFinished);

当进度== 100时如何退订? 如果我在.Where子句后添加.Take(1)调用,那会自动退订吗?

您可以使用TakeWhile方法:

eventStream.TakeWhile(e => myFoo.Progress != 100);

当TakeWile的谓词返回false时, 它将处置基础的可观察序列,而无需手动调用Dispose。

一种选择是使用Subscribe返回值:

IDisposable subscription = eventStream.Where(e => myFoo.Progress == 100)
                                      .Subscribe(OnFooFinished);

...

// Unsubscribe
subscription.Dispose();

怀疑使用Take(1)确实会退订,这对您来说可能更整洁。 看了一下,我很确定这取消订阅,因为它会触发“完成”消息,该消息通常会自动取消订阅。 我目前没有时间对此进行确认,恐怕:(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM