根据文档:
"a SemaphoreSlim
不使用 Windows 内核信号量”。
是否有任何特殊资源被使用SemaphoreSlim
这使得打电话很重要Dispose
当。。。的时候SemaphoreSlim
将不再使用?
如果您访问AvailableWaitHandle
财产,then Yes,你必须打电话Dispose()
清理非托管资源。
如果您不访问AvailableWaitHandle
, then No, 呼叫Dispose()
不会做任何重要的事情。
SemaphoreSlim
将创建一个ManualResetEvent
按需如果您访问AvailableWaitHandle
。这可能很有用,例如,如果您需要等待多个句柄。如果您访问AvailableWaitHandle
属性,然后无法调用Dispose()
你将会有一个泄露的ManualResetEvent
,它大概包装了一个非托管的句柄CreateEvent
需要相应调用的资源CloseHandle
清理。
正如其他海报所指出的,你should call Dispose()
当你完成任何实现的对象时IDisposable
。在这种情况下,忽略这种做法会带来一些风险,即使在技术上这样做可能是安全的:
- 我的陈述基于 .NET 4.6.1 的参考源代码。框架的某些未来版本发生变化的可能性总是很小(双关语)
SemaphoreSlim
去哪里Dispose()
是必须的。
- If your
SemaphoreSlim
暴露在类之外,调用代码可能会引用AvailableWaitHandle
财产没有意识到你的班级没有处置SemaphoreSlim
并造成非托管资源泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)