我需要处置 SemaphoreSlim 吗?

2024-04-19

根据文档:

"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。在这种情况下,忽略这种做法会带来一些风险,即使在技术上这样做可能是安全的:

  1. 我的陈述基于 .NET 4.6.1 的参考源代码。框架的某些未来版本发生变化的可能性总是很小(双关语)SemaphoreSlim去哪里Dispose()是必须的。
  2. If your SemaphoreSlim暴露在类之外,调用代码可能会引用AvailableWaitHandle财产没有意识到你的班级没有处置SemaphoreSlim并造成非托管资源泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要处置 SemaphoreSlim 吗? 的相关文章

随机推荐