【发布时间】:2019-12-01 11:40:36
【问题描述】:
如.net Api guide 中所述,对IModel 实例的操作不是线程安全的。
根据经验,
IModel实例的使用不应超过 一个线程同时:应用程序代码应该保持清晰IModel实例的线程所有权概念。如果不止一个 线程需要访问特定的IModel实例,应用程序 应该强制执行互斥本身。实现这一目标的一种方法是 供IModel的所有用户锁定实例本身。
然后将代码示例显示为在发布时强制互斥的一种方式。
IModel ch = RetrieveSomeSharedIModelInstance();
lock (ch) {
ch.BasicPublish(...);
}
到目前为止,一切都很好。然后解释了IModel操作序列化不正确的一些症状。但是他们指出,症状不限于这些操作。这句话的那部分确实在我们脑海中产生了一些问题。手动确认线程是否安全?在EventingBasicConsumer 的Received 事件处理程序内部进行确认之前,我们是否必须使用一些锁?
打开了一些github issue 以澄清这一点,但他们没有找到答案,并建议 OP 在 SO 中提出问题,但我无法找到。
【问题讨论】:
标签: c# .net rabbitmq thread-safety