我有一个场景,其中 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
吗?