我想限制线程的最大数量。我该怎么做呢?我知道我可以使用像SetMaximum
...if这样的东西,我正在使用ThreadPool
。
public async Task ProcessAsync()
{
while (true)
{
Task.Run(Work);
}
}
async Task Work()
{
// some time-consuming job
}
发布于 2019-12-17 08:18:35
您可以使用SemaphoreSlim来限制并发线程的数量。例如,要将执行限制为一次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);
}
信号量可用于限制许多类型资源的消耗,但在本例中,资源是线程池中的一个线程。
https://stackoverflow.com/questions/59365449
复制相似问题