gpt4 book ai didi

c# - 我需要处理 SemaphoreSlim 吗

转载 作者:IT王子 更新时间:2023-10-29 04:47:55 28 4
gpt4 key购买 nike

根据文档:

"a SemaphoreSlim doesn't use a Windows kernel semaphore".

SemaphoreSlim 是否使用了任何特殊资源,这使得在不再使用 SemaphoreSlim 时调用 Dispose 变得很重要?

最佳答案

如果您访问 AvailableWaitHandle 属性,然后是,您必须调用 Dispose() 来清理非托管资源。

如果您不访问 AvailableWaitHandle则否,调用 Dispose() 不会做任何重要的事情。

如果您访问 AvailableWaitHandle

SemaphoreSlim 将根据需要创建一个 ManualResetEvent。这可能很有用,例如,如果您需要等待多个句柄。如果您确实访问了 AvailableWaitHandle 属性,然后未能调用 Dispose(),您将有一个泄漏的 ManualResetEvent,它可能包含一个句柄到需要相应调用 CloseHandle 来清理的非托管 CreateEvent 资源。

正如其他发帖人所指出的,您应该在处理完任何实现IDisposable 的对象后调用Dispose()。在这种情况下,尽管从技术上讲这样做可能是安全的,但忽略这种做法会带来多种风险:

  1. 我的陈述基于 .NET 4.6.1 的引用源代码。框架的某些 future 版本会将 SemaphoreSlim 更改为需要 Dispose() 的位置,这种可能性总是很小(双关语意)。
  2. 如果您的 SemaphoreSlim 暴露在您的类之外,调用代码可能会引用 AvailableWaitHandle 属性,而没有意识到您的类没有处理 SemaphoreSlim 并造成非托管资源泄漏。

关于c# - 我需要处理 SemaphoreSlim 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033416/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com