F#:取消订阅 FSharp.Control.Reactive.Observable
F#: unsubscribe from an FSharp.Control.Reactive.Observable
关于如何取消订阅 Observable
,我一直无法找到一个明确的答案,该 Observable
是用 Observable.subscribe(...)
订阅的。这里还有另一个 SO 答案 (Event and Observable in FSharp),它非常接近,但没有明确说明这是如何实现的,除非我遗漏了什么。
对 Observable.subscribe( someSubscriptionFunction )
returns 和 IDisposable
的调用。我是否只需要 .Dispose()
它来删除 someSubscriptionFunction
(并且只删除它),或者这是否也对 Observable
或对此 [=11 的任何其他订阅有影响=]?
首先,如果您想在观察者通常停止发送通知之前停止接收通知(例如在触发 OnCompleted
或 OnError
之前),您只需要取消订阅即可。
为了了解可观察对象的行为方式,最清楚的方法可能是查看底层库的 F# 接口。
Observable.subscribe
返回的 IDisposable
的目的是从 IObservable
.
取消订阅单个 IObserver
The provider must implement a single method, Subscribe, that indicates
that an observer wants to receive push-based notifications. Callers to
the method pass an instance of the observer. The method returns an
IDisposable implementation that enables observers to cancel
notifications at any time before the provider has stopped sending
them.
(Source)
您可以从此处提供的 example 实现中看到此行为(在 C# 中,遗憾的是该页面缺少 F# 示例):
相关片段是:
private class Unsubscriber : IDisposable
{
private List<IObserver<Location>>_observers;
private IObserver<Location> _observer;
public Unsubscriber(List<IObserver<Location>> observers, IObserver<Location> observer)
{
this._observers = observers;
this._observer = observer;
}
public void Dispose()
{
if (_observer != null && _observers.Contains(_observer))
_observers.Remove(_observer);
}
}
当然,因为这些是接口,所以就实际行为而言,您完全受制于实施者。
因此,就实际删除订阅而言,是的,您需要做的就是 Dispose()
IDisposable
,不,它不应该对任何其他观察者产生影响。
您也可以使用 use
或 using
关键字而不是显式调用 dispose。有关更多信息,请参阅 this page。
关于如何取消订阅 Observable
,我一直无法找到一个明确的答案,该 Observable
是用 Observable.subscribe(...)
订阅的。这里还有另一个 SO 答案 (Event and Observable in FSharp),它非常接近,但没有明确说明这是如何实现的,除非我遗漏了什么。
对 Observable.subscribe( someSubscriptionFunction )
returns 和 IDisposable
的调用。我是否只需要 .Dispose()
它来删除 someSubscriptionFunction
(并且只删除它),或者这是否也对 Observable
或对此 [=11 的任何其他订阅有影响=]?
首先,如果您想在观察者通常停止发送通知之前停止接收通知(例如在触发 OnCompleted
或 OnError
之前),您只需要取消订阅即可。
为了了解可观察对象的行为方式,最清楚的方法可能是查看底层库的 F# 接口。
Observable.subscribe
返回的 IDisposable
的目的是从 IObservable
.
IObserver
The provider must implement a single method, Subscribe, that indicates that an observer wants to receive push-based notifications. Callers to the method pass an instance of the observer. The method returns an IDisposable implementation that enables observers to cancel notifications at any time before the provider has stopped sending them.
(Source)
您可以从此处提供的 example 实现中看到此行为(在 C# 中,遗憾的是该页面缺少 F# 示例):
相关片段是:
private class Unsubscriber : IDisposable
{
private List<IObserver<Location>>_observers;
private IObserver<Location> _observer;
public Unsubscriber(List<IObserver<Location>> observers, IObserver<Location> observer)
{
this._observers = observers;
this._observer = observer;
}
public void Dispose()
{
if (_observer != null && _observers.Contains(_observer))
_observers.Remove(_observer);
}
}
当然,因为这些是接口,所以就实际行为而言,您完全受制于实施者。
因此,就实际删除订阅而言,是的,您需要做的就是 Dispose()
IDisposable
,不,它不应该对任何其他观察者产生影响。
您也可以使用 use
或 using
关键字而不是显式调用 dispose。有关更多信息,请参阅 this page。