当 IConnectableObservable.Connect 被多次调用时,它的合约应该是什么?
当返回的 IDisposable 被处理后,应该发布 OnCompleted 还是应该断开连接并允许再次调用 Connect?
如果在第一次处理之前第二次调用 Connect,是否应该:
我正在尝试实现 IConnectableObservable,并且实现它的人员的文档非常简单。
如果您查看来源
第一个问题的答案(截至撰写本文时):
当返回的 IDisposable 被处理时,应该发布 OnCompleted 还是应该断开连接并允许再次调用 Connect?
直接断开连接
如果在第一次处理之前第二次调用 Connect
它应该:返回相同的 IDisposable,可能会从不同的代码区域进行意外处置
为了子孙后代,有趣的代码部分是:
public void Dispose()
{
lock (_parent._gate)
{
if (_subscription != null)
{
_subscription.Dispose();
_subscription = null;
_parent._connection = null;
}
}
}
和
public IDisposable Connect()
{
lock (_gate)
{
if (_connection == null)
{
var subscription = _source.SubscribeSafe(_subject);
_connection = new Connection(this, subscription);
}
return _connection;
}
}
正如您在上面看到的,有一个连接被释放并连接到一个锁块内,以防止并发修改。