我有一个 WCF 双工服务,带有一个名为 GetList 的 2 路方法,以及一个单路回调方法 ItemUpdated。
我在以下情况下检测到死锁:
- 服务调用 ItemUpdated 回调,该回调在客户端由 OnItemUpdated 方法处理。
- 在上一个方法返回之前,一些用户交互导致客户端调用服务上的 GetList。
我可以将我的服务的 ConcurrencyMode 设置为 Reentrant,但这不是我需要的。我需要确保我的客户端在调用 GetList 之前没有处理来自服务的任何回调。
所以我可以同步锁定一个对象以确保不会发生这种情况。那是我更好的选择吗?
更新:
只是为了澄清我当前的设计是什么,我的服务实际上是一个 Windows 服务,它按计划对对象列表进行一些处理,当每个项目被更新时,它会引发事件 ItemUpdated。此服务有一个 WCF 服务外观,它允许一个或多个控制台(客户端)订阅其事件并查看服务中发生的情况。