C# 多线程的阻塞和继续-ManaulResetEvent的使用

在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信。

多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况。

这里我介绍一下,使用ManualResetEvent类来对线程进行阻塞和继续操作。

它有三个重要的方法:Reset、Set和WaitOne。

1、首先介绍一下它的构造函数:

public ManualResetEvent (bool initialState);

参数 initialState,如果为 true,则将初始状态设置为终止;如果为 false,则将初始状态设置为非终止。

这是什么意思呢?它的意思是:如果为 false时,初始化ManaulResetEvent对象为非终止状态,当有线程调用ManaulResetEvent的WaitOne()方法时,该线程将进入阻塞状态。

如果改为true,则会初始化ManaulResetEvent对象为终止状态,当有线程调用ManaulResetEvent的WaitOne()方法时,该线程可以继续执行后面的操作。

2、Reset()方法

Reset方法,它会将ManualResetEvent的对象设置为非终止状态,告诉调用ManaulResetEvent的WaitOne()方法的线程:此处将阻塞线程。

3、Set()方法

Set方法与Reset刚好相反,当有线程调用Set()方法时,它会告诉包含ManaulResetEvent的WaitOne()方法的线程:此处改为了终止状态,程序可以继续运行了。

 

posted @   Johnny Li  阅读(2309)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示