我通过BufferManager.CreateBufferManager
的静态成员创建缓冲区管理器。这个新创建的BufferManager
被多个线程使用。是System.ServiceModel.Channels.BufferManager是否线程安全?
我应该使用lock
与TakeBuffer()
和ReturnBuffer()
或者它是线程安全的设计吗?
我通过BufferManager.CreateBufferManager
的静态成员创建缓冲区管理器。这个新创建的BufferManager
被多个线程使用。是System.ServiceModel.Channels.BufferManager是否线程安全?
我应该使用lock
与TakeBuffer()
和ReturnBuffer()
或者它是线程安全的设计吗?
内部BufferManager.CreateBufferManager
返回WrappingBufferManager
一个实例,其采用无形式并发控制的,但包裹其采用内部锁定时Take()
荷兰国际集团的新缓冲区的SynchronizedPool<T>
多个实例。因此,根据WrappingBufferManager
的简单性判断,假设您的部分上的任何锁定都是多余的,并且返回的类实际上是线程安全的是安全的。
我遇到了BufferManager的线程问题。我在WCF中创建了一个自定义消息编码器,根据我的观察,并不总能保证为每个调用创建缓冲区管理器。因此,字节被其他线程重复使用/返回,从而破坏了我的数据。
所以,要回答你的问题...不,他们是不是。由于您正在重复使用相同的实例,因此不保证thread-safe。