线程的等待时可以用这个,不论是线程池还是线程都可以用这个做等待。


ManualResetEvent md=new ManualResetEvent(false);//这个false 设置线程等待, true 允许线程不待等
IAsyncResult result= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//允许线程不用继续等待,可以执行下去
}).BeginInvoke("你好",null,null);
mre.WaitOne();//主线程被卡在这里,等待信号量变成true(mre.Set()这个方法后就可变为true不用等待)
Console.WriteLine("你吃饭了么!");
mre.Reset();//重新设为线程等待 IAsyncResult result01= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//设置线程不用继续等待,可以执行下去
}).BeginInvoke("还没吃",null,null);
mre.WaitOne();//又被阻塞了
Console.WriteLine("一起吃饭吧!");
//输出结果
你好
你吃饭了么!
还没吃
一起吃饭吧! //线程池中的使用
mre.Reset();
ThreadPool.QueueUserWorkItem((t) =>
{
Console.WriteLine("我是从线程池中走出的线程!");
mre.Set();
});
mre.WaitOne();

当然也可以用循环待等的执行的方式进行线程待等

 while (!result.IsCompleted)
{
Thread.Sleep(500);
Console.WriteLine("我在等你回复!"); }
Console.WriteLine("我吃了!");

信号量的使用 ManualResetEvent的更多相关文章

  1. C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用

    1.简介 虽然ThreadPool.Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常.或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它 ...

  2. 线程同步之ManualResetEvent类的用法

    笔者的一台激光测厚设备的软件, 它有一个运动线程, 一个激光数据处理线程. 运动线程做的事就是由A点移动到B点, 然后再由B点移动回A点. 激光处理线程要做的事就是采集指定数量点的激光数据, 随着采集 ...

  3. C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

    我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...

  4. 面向.Net程序员的后端性能优化实战

    最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一 ...

  5. C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

    /// <summary> /// 控制函数执行时间,超时返回null不继续执行 /// 调用方法 /// FuncTimeout.EventNeedRun action = delega ...

  6. 海康威视频监控设备Web查看系统(二):服务器篇

    声明:本系列文章只提供交流与学习使用.文章中所有涉及到海康威视设备的SDK均可在海康威视官方网站下载得到.文章中所有除官方SDK意外的代码均可随意使用,任何涉及到海康威视公司利益的非正常使用由使用者自 ...

  7. C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent

    看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...

  8. 多线程中的锁系统(三)-WaitHandle、AutoResetEvent、ManualResetEvent

    本章主要介绍下基于内核模式构造的线程同步方式,事件,信号量. 阅读目录: 理论 WaitHandle AutoResetEvent ManualResetEvent 总结 理论 Windows的线程同 ...

  9. 细说.NET中的多线程 (五 使用信号量进行同步)

    上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步 使用EventWaitHandle信号量进行同步 EventWaitHandle主要用于实现信号灯机制.信号灯主要用于通知等待的线程.主 ...

随机推荐

  1. mybatis批量生成

    使用了mybatis-generator后,寻找只写一个table标签就可以全部生成的方法 下载mybatis-generator-core-1.3.2-bundle.zip 解压后打开docs 发现 ...

  2. pytho装饰器参数那些事_inspect.getcallargs

    ''' Created on Jul 26, 2019 @author: tomcat ''' import inspect def chack_admin(func): def wrapper(*a ...

  3. oauth2学习

    oauth2 生词: 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials) 客户端模式( ...

  4. Adobe Premiere

    工具 移动工具(Selection Tool)快捷键(V) 最最常用的工具,常规功能是移动素材以及控制素材的长度 配合 ctrl:可以拖拽素材,移动到切入点进行插入 配合 shift:选择多目标(可以 ...

  5. hive sql基础了解

    会有些不一样 1 例如使用SQL 之前,要了解用了那个库,use jz_daojia 2 使用GET_JSON_OBJECT 函数等,以及参数 匹配 $.childBrithDay 挺有意思的.新玩意 ...

  6. 面试题57:数组中2个数的和(也是leetcode题目)

    题目:给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因 ...

  7. Fiddler设置展示接口响应时间

    在Tool bar上面找到Rules->CustomRules 在class Handlers{   里面添加 function BeginRequestTime(oS: Session){  ...

  8. C++中的面向对象(二)

    1,类之间的基本关系: 1,继承: 1,从已存在类细分出来的类和原类之间具有继承关系(is-a): 1,子类就是一个(is-a)父类: 2,继承是单向的: 2,继承的类(子类)拥有原类(父类)的所有属 ...

  9. 解决text-align: justify;浏览器、安卓手机不兼容问题

    1.兼容PC端浏览器 .h_text{ text-align:justify; text-justify:inter-ideograph;width:200px;} .span_hid{ displa ...

  10. k8s 组件介绍-kube-controller-manager

    1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node.Pod副本.服务端点(Endpoint).命名空间(Namespa ...