请问Rx问题,是否会调用subject.OnCompleted()整理/调用dispose / not leak memory或者我必须在返回IDisposable上调用dispose吗?
基本上我正在制作服务器请求/响应,并想知道客户端代码是否需要在下面的示例中调用replaySubject.Dispose()。
提前致谢。
try
{
object response = Send(msg);
replaySubject.OnNext(response);
}
catch (Exception e)
{
replaySubject.OnError(e);
}
finally
{
replaySubject.OnCompleted();
}
答案 0 :(得分:0)
对于ReplaySubjects
,你应该处理它们,让它们确定性地释放它们的内部重放缓冲区。请注意,一旦您处置它们,任何未来的订阅者将无法看到重播的事件。因此,如果您仍需要它们“重播”,请不要丢弃它们。
如果你不关心确定性,那么只要在它们完成后释放对它们的引用就足够了 - 当对象被垃圾收集时,它们的缓冲区将被清除。
答案 1 :(得分:0)
标准做法规定,如果您负责创建资源,那么您有责任处置该资源。如果ReplaySubject
/资源被定义为类中的字段,那么类本身应该实现IDisposable
。在该类Dispose()
方法中,该字段应该被处理掉。如果在闭包中定义ReplaySubject
/资源(例如在Observable.Create中),则公开一种方法来处理绑定到闭包的资源(可能返回IDisposable
Observable.Create
之类的.Replay(1)
一样)
还值得问一个问题,你为什么要使用主题?你能不只是{{1}}运营商吗?