我開發了一些工具來控制遊戲服務器的線程和正在使用的IDisposable
「令牌」進行試驗,這樣我可以這樣使用代碼:在C#中對線程實用程序使用'using' - 何時Dispose被調用?
using(SyncToken playerListLock = Area.ReadPlayerList())
{
//some stuff with the player list here
}
的想法是,我獲取讀鎖定一個區域內的玩家列表,當它與使用區塊不在同一範圍時,會自動解鎖。到目前爲止,這一切都已經實施和運作,但我擔心Dispose()
的撥打時間。
是否SyncLock
變量簡單地得到標誌着處置程序時離開using塊,然後獲得由垃圾收集器在某一點後清理,還是當前線程執行Dispose()
方法離開using
的一部分塊?
這種模式基本上是RAII,其中鎖是分配的資源。 Jon Skeet在他的MiscUtils中也使用了這種模式(即使用IDisposable
「令牌」)的一個示例here