我正在开发一些控制游戏服务器线程的工具,并尝试使用一个 IDisposable
"token",以便我可以使用以下代码:
using(SyncToken playerListLock = Area.ReadPlayerList())
{
//some stuff with the player list here
}
我想获取一个区域中玩家列表的读取锁,使用using块时,当它超出范围时会自动解锁。目前已经实现并运行良好,但我担心调用Dispose()的时间问题。
当程序离开using块时,SyncLock变量是否仅仅被标记为可处理,然后由垃圾回收器在稍后某个时刻清理,还是当前线程在离开using块时执行Dispose()方法?
这种模式基本上是RAII,其中锁是被分配的资源。Jon Skeet在他的MiscUtils中也使用了这种模式(即使用IDisposable "token")。您可以在这里查看此处的示例。