IConnectableObservable.Connect 的合约涉及多个调用



它被多次调用时,IConnectableObservable.Connect的合约应该是什么?

当释放返回的 IDisposable 时,应该发布 OnComplete,还是应该断开连接并允许第二次调用 Connect?

如果在释放第一个 Connect 之前第二次调用 Connect,它应该:

  • 返回相同的 IDisposable,可能来自不同代码区域的意外释放
  • 返回具有某种"处置引用计数"的新 IDisposable,并导致您称为"处置"的源出现问题,该源仍在发布值

我正在尝试实现 IConnectableObservable,实现它的人的文档非常轻巧。

如果你看一下源代码

第一个问题的答案(截至撰写本文时(:

当释放返回的 IDisposable 时,应该发布 OnComplete,还是应该断开连接并允许第二次调用 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;
        }
    }

正如您在上面看到的,有一个连接在锁定块内被处置和连接,以防止并发修改。

相关内容

  • 没有找到相关文章

最新更新