首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用Task.Run()时限制线程的最大数量?

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

Stack Overflow用户
提问于 2019-12-17 07:04:30
回答 1查看 108关注 0票数 0

我想限制线程的最大数量。我该怎么做呢?我知道我可以使用像SetMaximum...if这样的东西,我正在使用ThreadPool

代码语言:javascript
运行
复制
public async Task ProcessAsync()
{
    while (true)
    {
        Task.Run(Work);
    }
}

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

Stack Overflow用户

发布于 2019-12-17 08:18:35

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

代码语言:javascript
运行
复制
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);
}

信号量可用于限制许多类型资源的消耗,但在本例中,资源是线程池中的一个线程。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59365449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档