.net 如何限制使用Task.Run()时的最大线程数?

.net 如何限制使用Task.Run()时的最大线程数?,.net,asynchronous,threadpool,core,.net,Asynchronous,Threadpool,Core,我有以下代码。我想限制线程的最大数量。我怎么做?我知道我可以用setmax之类的东西。。。如果我使用的是线程池。谢谢 public async Task ProcessAsync() { while (true) { Task.Run(Work); } } async Task Work() { // some time-consuming job } 您可

我有以下代码。我想限制线程的最大数量。我怎么做?我知道我可以用setmax之类的东西。。。如果我使用的是线程池。谢谢

    public async Task ProcessAsync()
    {
        while (true)
        {
            Task.Run(Work);
        }
    }

    async Task Work()
    {
        // some time-consuming job
    }

您可以使用信号量限制并发线程的数量。例如,将一次执行限制为3个线程:

async Task  Main()
{
    SemaphoreSlim semaphore = new SemaphoreSlim(3); // Limit to 3 threads
    while (true)
    {
        await semaphore.WaitAsync(); // Wait when more than 3 threads are running
        Task.Run(() =>
        {
            Work();
            semaphore.Release(); // Work is done, signal to semaphore that more work is possible
        });
    }

}

void Work()
{
    Console.WriteLine(DateTime.Now);
    Thread.Sleep(3000);
}
信号量可用于限制许多类型资源的消耗,但在本例中,资源是线程池中的一个线程。

while(true)
将限制
任务
s的数量,使其在某个或另一个操作系统资源耗尽之前能够运行的数量尽可能多。是否要限制已启动的
任务
的数量
for(i=0;i<10;i++)
可以做到这一点。还是要限制同时运行的
任务
的数量?核心的数量,还是什么?(或者那标签应该是什么?)