信号量WaitOne无法正常运行

2 c# multithreading semaphore

我有一个限制为3的信号量,然而,这只是随意调用它.我假设是因为我使用(1000).但是,当我尝试just()它将永远不会通过WaitOne我不知道该怎么做.

private static Semaphore _pool;
_pool = new Semaphore(0, 3);
var options = new ParallelOptions();
options.MaxDegreeOfParallelism = 1;
Parallel.ForEach(urlTable.AsEnumerable(),options, drow =>
{
    using (var WCC = new MasterCrawlerClass())
    {
                ActiveThreads++;
                _pool.WaitOne(1000);
                Console.WriteLine("Active Thread #: " + ActiveThreads);
                WCC.MasterCrawlBegin(drow);
                Console.WriteLine("Done Crawling a datarow");
                ActiveThreads--;
                _pool.Release();

    }
});
Run Code Online (Sandbox Code Playgroud)

dle*_*lev 6

你错误地控制了信号量.应该_pool = new Semaphore(3, 3);这样做也将消除传递超时参数的需要WaitOne().

第一个参数是阻塞之前可以授予的初始请求数,因此传递0意味着任何后续调用WaitOne()将立即阻止.

  • @Mike这是*可能授予的初始计数*;将其设置为 0 意味着“您可以在阻止之前最初授予 0 个请求”,这显然不是您想要的。 (2认同)