gpt4 book ai didi

c# - SemaphoreSlim.WaitAsync 在 try block 之前/之后

转载 作者:太空狗 更新时间:2023-10-29 20:54:33 25 4
gpt4 key购买 nike

我知道在同步世界中第一个片段是正确的,但是 WaitAsync 和 async/await 魔法又是什么呢?请给我一些 .net 内部信息。

await _semaphore.WaitAsync();
try
{
// todo
}
finally
{
_semaphore.Release();
}

try
{
await _semaphore.WaitAsync();
// todo
}
finally
{
_semaphore.Release();
}

最佳答案

根据 MSDN,SemaphoreSlim.WaitAsync 可能会抛出:

  1. ObjectDisposedException - 如果信号量已被释放

  2. ArgumentOutOfRangeException - 如果您选择接受 int 并且它是负数(不包括 -1)的重载

在这两种情况下,SemaphoreSlim 都不会获取锁,这使得在 finally block 中释放它变得不必要。

需要注意的一件事是,如果在第二个示例中对象被释放或为 null,则 finally block 将执行并触发另一个异常或调用 Release,这可能尚未获得任何要释放的锁第一名。

总而言之,为了与非异步锁保持一致并避免 finally block 中的异常

,我会选择前者

关于c# - SemaphoreSlim.WaitAsync 在 try block 之前/之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139084/

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