CountDownEvent 信号类来等待直到一定数量的操作完成
当主程序启动时,创建一个 CountDownEvent 类的实例,在其构造函数中指定个数操作完成发出信号,当前为2个操作完成会发出信号。
/// <summary>
/// 创建 CountdownEvent 实例,指定达到次数为 2 次
/// </summary>
public static CountdownEvent _countdown = new CountdownEvent(); /// <summary>
///
/// </summary>
/// <param name="message">消息提示</param>
/// <param name="seconds">时间(秒)</param>
public static void PerformOperation(string message, int seconds)
{
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds)); Console.WriteLine(message); _countdown.Signal();
}
一旦第二个线程完成,主线程会从等待 CountdownEvent 的状态中返回并继续执行。针对需要等到多个异步操作完成的情形,使用该方式非常便利。
/// <summary>
/// 输出
/// </summary>
public static void Print()
{
// Starting two operations var t1 = new System.Threading.Thread(() => PerformOperation("Operation 1 is completed", )); var t2 = new System.Threading.Thread(() => PerformOperation("Operation 2 is completed", )); t1.Start();
t2.Start(); // 如果 调用 _countdown.Signal() 没达到指定的次数
// 那么 _countdown.Signal() 将一直阻止,继续等待
_countdown.Wait(); // 阻止当前线程 // Both operation have been completed
_countdown.Dispose(); // 释放资源
}
如果调用 _countdown.Signal() 没达到指定的次数 ,那么 _countdown.Signal() 将一直阻止,继续等待。请确保使用 CountDownEvent 时,所有线程完成后都要调用 Signal 方法。
CountDownEvent 信号类来等待直到一定数量的操作完成的更多相关文章
- 关于PHP面向对象中—类的定义与对象的实例化操作以及构造、析构函数的特殊用法
类的定义与对象的实例化操作 <?php //类里面的成员是属于对象的class Hero{ public $name;//成员变量 //成员属性(存在于强类型语言中) prot ...
- cpu_relax( )-----对自选循环等待(spin-wait loops)操作的优化【转】
cpu_relax()-----对自选循环等待(spin-wait loops)操作的优化 转自:http://www.doc100.net/bugs/t/173547/index.html 在loc ...
- 使用WebDriverWait类处理等待(sleep)的问题
用selenium进行web UI的自动化开发时,经常遇到loading需要等待的时候,或者需要验证一个action之后某个dialog是否呈现或者消失.对于这类情况是不建议用sleep(xx)来死等 ...
- 等待唤醒机制代码实现_包子类&包子铺类和等待唤醒机制代码实现_吃货类&测试类
资源类:包子类 设置包子的属性 皮 陷 包子的状态:有 true 没有 false public class BaoZi { //皮 String pi; //陷 String xian; //包子的 ...
- Util应用程序框架公共操作类(一):数据类型转换公共操作类(介绍篇)
本系列文章将介绍一些对初学者有帮助的辅助类,这些辅助类本身并没有什么稀奇之处,如何能发现需要封装它们可能更加重要,所谓授之以鱼不如授之以渔,掌握封装公共操作类的技巧才是关键,我会详细说明创建这些类的动 ...
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...
- C# 对类中的保护成员进行写操作(邀请大家拍砖)
假如我有一个类库 Lib,提供一个类 ClassA 对外服务,ClassA 中有若干只读属性 PropA, PropB 等等,外部调用者无法对 ClassA 中的 PropA 和 PropB 进行写操 ...
- 多态,封装,反射,类内置attr属性,os操作复习
1.多态 #多态 多态是指对象如何通过他们共同的属性和动作来操作及访问,而不需要考虑他们具体的类 运行时候,多种实现 反应运行时候状态 class H2O: def __init__(self,nam ...
- Java学习笔记——File类文件管理及IO读写、复制操作
File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图片 文件和文件夹 相关函数 (boolean) mkdir( ...
随机推荐
- pm2入门
简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 全局安装,简直不能更简单. npm install -g ...
- F5部署SSL证书
查找中间证书 为了保证可以兼容所有浏览器,我们必须在服务器上安装中间证书,请到 中间证书下载工具,输入您的Server.cer,然后下载中间证书,请将中间证书保存为Chain.cer. 证书文件的上传 ...
- XLNet原理探究
1. 前言 XLNet原文链接是CMU与谷歌大脑提出的全新NLP模型,在20个任务上超过了BERT的表现,并在18个任务上取得了当前最佳效果,包括机器问答.自然语言推断.情感分析和文档排序. 这篇新论 ...
- Ubuntu下搭建Kubernetes集群(1)--安装docker
可以使用物理机,也可以使用虚拟机. 首先参考https://docs.docker.com/install/linux/docker-ce/ubuntu/ 官方文档学会安装docker. 1.首先移除 ...
- @TableField(select=false)
使用这个注解排除删除标识字段.
- 201871010104-陈园园 《面向对象程序设计(java)》第十四周学习总结
201871010104-陈园园 <面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 曹玉中-201871010105《面向对象程序设计(java)》第6-7周学习总结
曹玉中-201871010105<面向对象程序设计(java)>第6-7周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.c ...
- 201871010107-公海瑜《面向对象程序设计(java)》第十六周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪 ...
- IDEA中的模板文件设置
idea中的设置 Settings>Editor>File and code Templates>Includes>File Header 中粘贴下面的表达格式 /** * @ ...
- JAVA并发-Executor
结构 类继承图: 上面的各个接口/类的关系和作用: Executor 执行器接口,也是最顶层的抽象核心接口, 分离了任务和任务的执行. ExecutorService 在Executor的基础上提供了 ...