设置 C# SemaphoreSlim 最小计数似乎不起作用

Setting C# SemaphoreSlim minimum count does not seem to work

这是我的代码

   SemaphoreSlim slim = new SemaphoreSlim(1);
            _ = Task.Run(() =>
            {
                Task.Delay(2000);
                _testOutputHelper.WriteLine("Unleash!");
                slim.Release();
            });
            _testOutputHelper.WriteLine("Waiting");
            await slim.WaitAsync();
            _testOutputHelper.WriteLine("Done");

讽刺的是输出如下:

Waiting
Unleash!
Done

A​​FAIK WaitAsync() 假设允许线程,因为我已将初始计数设置为 1。不知何故,它不是那样的

有什么帮助吗?

您忘记了 await 您的 Task.Delay(2000),所以这一行基本上什么都不做,Task.Run 线程立即去写“释放!”,然后释放信号量。因此,要实现您想要的效果,只需等待该延迟,让主线程有时间首先到达 WaitAsync

SemaphoreSlim slim = new SemaphoreSlim(1);
_ = Task.Run(async () =>
{
    await Task.Delay(2000);
    Console.WriteLine("Unleash!");
    slim.Release();
});
Console.WriteLine("Waiting");
await slim.WaitAsync();
Console.WriteLine("Done");