我创建了一个 Messenger 库,并使其成为线程安全的,因此它可以在线程之间共享而无需担心。我主要使用 Monitor 类来实现这一点。
我有一个 Logout 例程,它可能需要一些时间才能完成,因为它会在关闭套接字等之前尝试等待事务发生。它是异步的并且具有 Begin/End 方法,但对于这个示例,我们将假装它是同步的。
如果两个线程一个接一个地调用 Logout 怎么办?我应该用第二个线程做什么?
目前我阻塞(使用 Monitor.Wait 等待来自第一个线程的脉冲)直到第一次注销完成,然后抛出 AlreadyLoggedOutException。
如果调用 Logout 但已经发生注销,我还玩弄了一个 LogoutInProgress 异常。
两者似乎都有优点和缺点,但我想知道其他人认为什么是最好的。