加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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的功能,它不具有确定性破坏功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读