当前位置: 首页 > news >正文

【C#】ThreadPool的使用

1.Thread的使用 

Thread的使用参考:【C#】Thread的使用

 

2.ThreadPool的使用

.NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool 类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程,从而提高应用程序的性能。

下面是关于如何在 C# 中使用 ThreadPool 的基本示例:

1. 基本用法

要使用 ThreadPool 来执行一个方法,你可以调用 QueueUserWorkItem 方法。这个方法会将指定的工作项加入到 ThreadPool 的队列中,并由 ThreadPool 决定何时执行。

1.1 示例代码:

using System;
using System.Threading;class Program
{static void Main(){// 使用匿名方法来定义工作项ThreadPool.QueueUserWorkItem(state => DoSomeWork(state));Console.WriteLine("Main thread is doing some work...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}

 

2. 获取工作完成的通知

有时需要知道 ThreadPool 已经完成了你的任务。这可以通过向 QueueUserWorkItem 方法传递一个回调委托来实现。

2.1 示例代码:

using System;
using System.Threading;class Program
{static void Main(){// 定义回调函数WaitCallback callback = state => DoSomeWork(state);// 注册回调函数ThreadPool.QueueUserWorkItem(callback, "Hello from ThreadPool");// 在主线程上等待一段时间,确保回调被处理Thread.Sleep(1000);Console.WriteLine("Main thread continues...");Console.ReadLine();}static void DoSomeWork(object state){Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} is processing {state}");}
}

3. 设置最大线程数

可以通过设置 ThreadPool.SetMaxThreads 方法来限制 ThreadPool 可以使用的最大线程数。

3.1 示例代码: 

using System;
using System.Threading;class Program
{static void Main(){int maxWorkerThreads, maxIoCompletionThreads;// 设置最大线程数ThreadPool.SetMaxThreads(50, 100);// 获取最大线程数ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxIoCompletionThreads);Console.WriteLine($"Max Worker Threads: {maxWorkerThreads}");Console.WriteLine($"Max IO Completion Threads: {maxIoCompletionThreads}");Console.ReadLine();}
}

4. 获取当前可用线程数

也可以获取当前 ThreadPool 中可用的线程数量。

4.1 示例代码:

using System;
using System.Threading;class Program
{static void Main(){int availableWorkerThreads, availableIoCompletionThreads;// 获取当前可用线程数ThreadPool.GetAvailableThreads(out availableWorkerThreads, out availableIoCompletionThreads);Console.WriteLine($"Available Worker Threads: {availableWorkerThreads}");Console.WriteLine($"Available IO Completion Threads: {availableIoCompletionThreads}");Console.ReadLine();}
}

以上就是一些基本的 ThreadPool 使用示例。

5.请注意

ThreadPool 的设计是为了高效地管理和调度线程,所以它非常适合于那些可以并行执行的任务。然而,对于长时间运行的任务或者对线程控制有更严格要求的任务,可能需要考虑使用其他机制如 TaskTask Parallel Library (TPL)

 

3.CancellationTokenSource与Thread的启动、取消的区别

使用参考:

【C#】 CancellationTokenSource 与Thread的启动、取消的区别?-CSDN博客文章浏览阅读816次,点赞10次,收藏9次。【C#】 CancellationTokenSource 与Thread的启动、取消的区别?https://blog.csdn.net/wangnaisheng/article/details/140541192

 

http://www.lryc.cn/news/410788.html

相关文章:

  • 【Python系列】Python 中`eval()`函数的正确使用及其风险分析
  • 使用Spring Boot开发应用:基于请求参数MD5的缓存键及其他缓存方式
  • typescript中interface常见3种用法
  • windows10 安装CUDA教程
  • 计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战
  • PSO求解函数最小值的MATLAB例程|MATLAB源代码
  • scrapy 爬取旅游景点相关数据(一)
  • 构建铁塔基站安全防护网:视频AI智能监控技术引领智慧化转型
  • Java中的分布式缓存:Ehcache与Hazelcast
  • 前端开发工程师的薪资,主要取决于哪3个方面?
  • springboot美食网站—计算机毕业设计源码11574
  • WordPress建站:如何使用ChemiCloud搭建外贸独立站
  • 在 Vim 编辑器中,如果某个单词被意外地高亮显示,使用:noh可以取消高亮显示
  • 一条命令安装mysql,php
  • 配置maven环境
  • 飞书打卡 快捷指令
  • LeYOLO,一种用于目标检测的新型可扩展且高效的CNN架构
  • docker安装phpMyAdmin
  • 举例详细学习和分析后端业务逻辑代码开发思路
  • 面试经典算法150题系列-数组/字符串操作之轮转数组
  • 苹果手机怎么录屏?一键操作,轻松掌握录屏技巧
  • [Vue3] - 3 数据响应式
  • 【话题】“八股文”在实际工作中是助力、阻力还是空谈?
  • Windows 10 安装 WSL、安装 Go 以及配置环境变量的详细教程
  • 论文阅读:基于生物神经元的模拟游戏世界感知与学习
  • 理解最先进模型的起点GPT-2 源码 配置的解释
  • C++11 可变参数模板
  • 项目实战——外挂开发(30小时精通C++和外挂实战)
  • 【人工智能专栏】Constructive损失解析
  • PHP经销商订货管理系统小程序源码