【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://xiahunao.cn/news/3279702.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8pose 部署rknn(rk3588)、部署地平线Horizon、部署TensorRT,部署工程难度小、模型推理速度快,DFL放后处理中

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 之前写了yolov8、yolov8seg、yolov8obb 的 DFL 放在模型中和放在后处理…

XXE-lab-master靶场:PHP_xxe

目录 有回显 测试回显位置 构建payload 无回显数据外带 构建payload 漏洞修复 XXE-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞靶场。 下载地址:https://github.com/c0ny1/xxe-lab 将PHPStudy的中间件与版本信息调制为 php-5.4.29Apache 以…

UCC5320SCDWVR驱动SIC的功耗计算

驱动功耗可以通过分析器件的电气特性和推荐的电源电压来估算。以下是一些关键信息,用于估算功耗: 电源电流: 输入电源静态电流(IVCC1​):最小值为1.67 mA,典型值为2.4 mA。输出电源静态电流&am…

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

刷题了:226.翻转二叉树 | 101. 对称二叉树

226.翻转二叉树 文章讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解:https://www.bilibili.com/video/BV1sP4y1f7q7/?spm_id_from333.788&vd_sourcee70917aa6392827d1ccc8d85e19e8375 题目链接:https://leetcode.cn…

从PyTorch官方的一篇教程说开去(5 - 神经网络 torch.nn)

神经网络长啥样?有没有四只眼睛八条腿? 借图镇楼 - 真的是非常经典,可以给下面的解释省掉很多力气。 分3个维度阐述 - 1)输入数据集。假如你自己去微调一下大模型就知道,最开始的一步就是要准备(足够大…

视频生成AI工具——PixVerse V2 登场:支持一键生成5段、最长 40S 连续视频!

就在昨天,光源伙伴 「 爱诗科技 」正式发布其视频生成产品 PixVerse V2 , 并全球同步开放,更低门槛,更高质量,更有逻辑,更长时长,这几个“更”,让这款产品受到了超高关注,今天带大家…

GD32手把手教你移植FlashDB(片外Flash) -- 3.FlashDB使用

GD32手把手教你移植FlashDB(片外Flash) – 1.FlashDB-sfud移植 GD32手把手教你移植FlashDB(片外Flash) – 2.FlashDB移植 GD32手把手教你移植FlashDB(片外Flash) – 3.FlashDB使用 示例代码: https://gitee.com/ljmRD/GD32F427_FlashDB 3.FlashDB使用 main() /*************…

华为云上如何创建桶

目录 一、进入对象存储服务(OBS)页面,点击【创建桶】二、输入桶的相关信息三、获取 projectId四、获取 OBS Endpoint五、获取 AK/SK一、进入对象存储服务(OBS)页面,点击【创建桶】 二、输入桶的相关信息 可以勾选购买套餐: 点【立即创建】按钮完成桶的创建。 三、获取…

Vue3开源Tree组件研发:节点勾选支持v-model

自研Tree组件有两个原因:1. 目前开源UI对Tree组件的用户API不太友好,2. 提升Vue3组件自研能力。 目前已实现的功能见上面思维导图。想象Tree组件的一个使用场景:后台管理员通过Tree组件来完成用户角色授权,同时支持对权限进行新增…

【和相同的二元子数组】python刷题记录

R2-前缀和专题 目录 前缀和哈希表 双指针 ps: 第一眼过去,这题应该能用双指针解出来,应该也能用前缀和解题。 前缀和哈希表 适用于 nums[i] 值不固定为 0 和 1 的其他情况 class Solution:def numSubarraysWithSum(self, nums: List[int], goal: i…

揭秘高效语音转文字工具:让沟通更便捷

嘿,各位办公室的小伙伴们,今儿咱们来聊聊那些能让咱们文员生活大变样的神器——特别是那些能把咱们嘴里嘟囔的话儿,瞬间变成电脑里整整齐齐文字的语音转文字工具。说起来,自从有了这些宝贝,我感觉自己都快能飞起来了&a…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址,这样在需要迁移应用的时候就造成了巨大的麻烦,所以我决定用nginx做反向代理,这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…

ETH现货ETF流入量估算:会重演BTC现货ETF走势吗?

以太坊现货ETF将于7月23日上线,成为市场关注的焦点。ETH ETF的推出带来了很多与BTC ETF不同的特性,这些特性容易被市场忽视。本文将探讨ETH现货ETF的流入量估算,并分析其是否会重演BTC现货ETF的走势。 ETHE流出量预测 ETH ETF的收费结构与BT…

生活方式酒店升势迅起,喆啡酒店缘何成为投资热点?

伴随国内消费结构转型升级,旅游需求持续增加。文旅部发布的《国内旅游提升计划(2023—2025年)》提出,需丰富优质旅游供给,并进一步提高消费者体验及满意度,这将为酒店行业带来更广阔的客源和更高的质量要求…

云借阅图书管理系统——系统概述

一、云借阅系统功能模块介绍 云借阅图书管理系统主要实现了两大功能模块:用户登录模块和图书管理模块,用户登录模块主要用于实现用户的登录与注销;图书管理模块主要用于管理图书,如新书推荐、图书借阅等。 二、云借阅系统功能结…

怎么隐藏搜狗输入法

点击输入法,右键选择更多 点击选项,点击全屏隐藏

Mojo函数

正如在语言基础中提到的,Mojo支持两种类型的函数:def和fn函数。您可以在任何函数中使用这两种声明方式,包括main()函数,但它们具有不同的默认行为,如本页面所述。 我们认为def和fn都有很好的用例,并且不认…

opencv arm 交叉编译

step1.opencv源码文件夹下新建build-arm目录 step2. cmake图像化配置 cmake-gui .. step3. 选择交叉编译 step4.检索交叉编译链路径 step5. 配置 配置install路径 配置编译、链接选项 添加人脸检测模块 config->generate step6. make编译 built-arm目录下: …

谷粒商城实战笔记-61-商品服务-API-品牌管理-云存储开通与使用

文章目录 一,图片云存储二,阿里云OSS1,OSS2,基于OSS的文件上传架构3,Java中使用OSS 一,图片云存储 这张图展示了文件存储的几种常见模式: 普通上传分布式情况下的普通上传使用自建服务器云存储…