当IConnectableObservable.Connect被多次调用时,该合约应该是什么?
如果处理的IDisposable被处理掉,应该发布OnCompleted还是只是断开连接并允许第二次调用Connect?
如果在第一次处理Connect之前第二次调用Connect,则应该:
我正在尝试实现IConnectableObservable,实现它的人员的文档非常简单。
答案 0 :(得分:1)
如果您查看source
第一个问题的答案(撰写时):
如果处理的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;
}
}
正如您在上面所看到的那样,只有一个连接被配置并连接到一个锁定块内,以防止并发修改。