gpt4 book ai didi

c# - 跳过 SemaphoreSlim 而不是等待

转载 作者:太空狗 更新时间:2023-10-29 19:52:55 43 4
gpt4 key购买 nike

我在 Async/Await 函数中有一部分代码,我希望一次只执行一个线程。

这相对简单,只需创建一个新的 SemaphoreSlim(1) 并使用 WaitAsync/Release。效果是第一个线程执行,其他线程等待,然后一个一个执行。

我想要实现的实际上略有不同。我希望其他线程不要等待,而是退出函数(即我不想阻塞其他线程)。因此,如果有一个属性“NumberOfThreadsCurrentlyExecuting”,我将有效地拥有一个 If Semaphore.NumberOfThreadsCurrentlyExecuting > 0 Then Return。

但是这样的属性并不存在。有没有人知道解决这个问题的方法?

谢谢查尔斯

最佳答案

如何使用具有零超时的 SemaphoreSlim.Wait/Async?如果无法进入信号量(因为已经进入),则返回false。

请注意,Monitor(因此lock)完全不适合async

(因此您不能在 lockawait)因为

  1. 进入锁后,您的任务可能会在另一个线程上继续(因此您将尝试从另一个线程释放锁)
  2. 在您等待之后,另一个延续可能会使用您的线程(同时它仍然持有锁),因此如果它尝试获取锁,它将成功

关于c# - 跳过 SemaphoreSlim 而不是等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296956/

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