设置 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
AFAIK 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");
这是我的代码
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
AFAIK 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");