在C#中使用’using’和线程实用程序 – 何时调用Dispose?
发布时间:2020-12-15 19:50:17 所属栏目:百科 来源:网络整理
导读:我正在开发一些实用程序来控制游戏服务器的线程,我正在尝试使用IDisposable“令牌”,以便我可以使用这样的代码: using(SyncToken playerListLock = Area.ReadPlayerList()){ //some stuff with the player list here} 我的想法是,我在一个区域中的玩家列表
我正在开发一些实用程序来控制游戏服务器的线程,我正在尝试使用IDisposable“令牌”,以便我可以使用这样的代码:
using(SyncToken playerListLock = Area.ReadPlayerList()) { //some stuff with the player list here } 我的想法是,我在一个区域中的玩家列表上获得了一个读锁定,当它超出使用块的范围时,它会自动解锁.到目前为止,这一切都已实现并正常工作,但我担心调用Dispose()的时间. 当程序离开使用块然后稍后由垃圾收集器清理时,SyncLock变量是否只是被标记为处理,或者当前线程是否作为离开using块的一部分执行Dispose()方法? 这种模式基本上是RAII,其中锁是被分配的资源. Jon Skeet在他的MiscUtils here中也使用了这种模式的一个例子(即使用IDisposable“令牌”) 解决方法
在使用范围退出后立即清理它.
实际上,这个 using(SyncToken playerListLock = Area.ReadPlayerList()) { //some stuff with the player list here } 是语法糖 IDisposable playerListLock; try { playerListLock = Area.ReadPlayerList(); } finally { if (playerListLock != null) playerListLock.Dispose(); } 使用的目的是在C#中启用类似RAII的功能,它不具有确定性破坏功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |