首页 > 后端开发 > C++ > 如何使用C#以有限数量的线程并发执行多个任务?

如何使用C#以有限数量的线程并发执行多个任务?

Susan Sarandon
发布: 2025-01-02 15:08:38
原创
616 人浏览过

How Can I Execute Multiple Tasks Concurrently with a Limited Number of Threads Using C#?

用有限的线程并发执行任务

问题:

假设你有一组必须按顺序执行的任务,最多只能运行 X 个任务 时间。传统上,ThreadPool.QueueUserWorkItem() 用于此类任务,但现在被认为是次优方法。

使用任务的解决方案:

要实现此并发限制,请使用对于任务,我们可以使用 SemaphoreSlim 对象来管理可用线程的数量。下面是演示该方法的代码片段:

SemaphoreSlim maxThread = new SemaphoreSlim(10);

for (int i = 0; i < 115; i++)
{
    maxThread.Wait();
    Task.Factory.StartNew(() =>
        {
            // Your task implementation
        }, TaskCreationOptions.LongRunning)
    .ContinueWith((task) => maxThread.Release());
}
登录后复制

代码的工作原理如下:

  • SemaphoreSlim 初始化: SemaphoreSlim 使用最大线程数进行初始化10 个,最多允许运行 10 个任务
  • 任务执行: 对于每个要执行的任务,都会调用信号量的 Wait() 方法,该方法会阻塞,直到有线程可用。一旦线程空闲,就会使用 Task.Factory.StartNew() 启动一个新任务。
  • 任务完成: 每个任务完成后,附加到任务的ContinueWith() 方法会释放调用信号量的Release()方法所使用的线程。
  • 顺序执行:由于信号量强制执行有限的线程可用性,任务按顺序执行,在任何给定时间最多运行 10 个任务。

以上是如何使用C#以有限数量的线程并发执行多个任务?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板