0

我有一个场景,其中 myIModel是从方法中的池中获取的。该方法可以被多个线程同时调用。但在那种情况下,我相信IModel每次调用中的对象不会相同(因为它是由池创建的),并且只有在返回池后才能再次获得相同的对象。

//_channelPool here is a DefaultObjectPool<IModel>
public void Publish(...){
     var channel = _channelPool.Get();
     try {
        //use the obtained channel here ...
        //...
     } 
     finally {
         _channelPool.Return(channel);
     }
}

但是不知何故,我得到了这个异常,涉及IModel多个线程使用一个相同的:

System.NotSupportedException:禁止请求流水线

所以我认为可能有IModel多个线程使用不同的实例,但它们都有一个相同的通道 id(通道号)。那可能吗?而且我们实际上需要使用IModel通道 id/编号(而不是引用)来锁定代码?

换句话说,每次我这样称呼:

_connection.CreateModel();

它可能会返回不同IModel的相同ChannelNumber吗?

4

0 回答 0