[英]C# .NET Core 3.1 SemaphoreSlim with many threads and timeout: how does it work?
[英]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");
諷刺的是output如下:
Waiting
Unleash!
Done
AFAIK WaitAsync() 假設允許線程,因為我將初始計數設置為 1。不知何故,它不是那樣的
有什么幫助嗎?
你忘了await
你的Task.Delay(2000)
,所以這一行基本上什么都不做, Task.Run
線程立即去寫“Unleash”。 然后釋放信號量,所以要實現你想要的,只需等待那個延遲,讓主線程有時間首先到達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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.