簡體   English   中英

設置 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");

諷刺的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM