C# 如何控制多线程同步执行

写在前面

使用Task类来控制多线程的同步执行,可应用于多任务分发执行后,再做归并处理。Tas既拥有线程池的优点,同时也解决了使用ThreadPool不易控制的弊端;可以非常简便并可靠地实现多线程的顺序执行。

代码实现

public class ThreadTester
{public static void ThreadTest01(){ var task01 = new Task(() =>{Thread.Sleep(1000);Console.WriteLine("task01 执行完成");});// 以同步方式执行task01.RunSynchronously();Console.WriteLine("第一阶段主线程执行完成");var task02 = new Task(() =>{Thread.Sleep(1300);Console.WriteLine("task02 执行完成");});task02.Start();var task03 = new Task(() =>{Thread.Sleep(800);Console.WriteLine("task03 执行完成");});task03.Start();// 执行等待以保证同步task02.Wait();task03.Wait();Console.WriteLine("第二阶段主线程执行完成");var task04 = new Task(() =>{Thread.Sleep(1500);Console.WriteLine("task04 执行完成");});task04.Start();var task05 = new Task(() =>{Thread.Sleep(600);Console.WriteLine("task05 执行完成");});task05.Start();// 执行等待以保证同步Task.WaitAll(new Task[] { task04, task05 });Console.WriteLine("第三阶段主线程执行完成");var task06 = new Task(() =>{Thread.Sleep(1200);Console.WriteLine("task06 执行完成");});task06.Start();var task07 = new Task(() =>{Thread.Sleep(100);Console.WriteLine("task07 执行完成");});task07.Start();// 全部完成后再执行Task.WhenAll(new Task[] { task06, task07 }).ContinueWith((t) =>{Thread.Sleep(200);Console.WriteLine("第四阶段最后完成");});Console.WriteLine("第四阶段主线程执行完成");Console.ReadKey();}}

执行结果 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王道考研--》单链表课后习题C语言代码实现(冲刺)

考研是许多计算机科学专业学生追求高学历、寻求更好就业前景的途径。在考研过程中,数据结构是一个非常重要的科目,而代码实现题更是其中的难点之一。在这篇文章中,我们将探讨如何通过实现数据结构代码问题来提升考研成绩。无论您是否有编程经…

设计模式模板方法模式讲解和代码示例

引言 模版方法是一种行为设计模式, 它在基类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 Java语言 使用示例: 模版方法模式在 Java 框架中很常见。 开发者通常使用它来向框架用户提供通过继承实现的、 对标准功能进行扩展的简单方式。 这…

K8S(十)—容器探针

这里写目录标题 容器探针(probe)检查机制探测结果探测类型何时该使用存活态探针?何时该使用就绪态探针?何时该使用启动探针? 使用exechttptcpgrpc使用命名端口 使用启动探针保护慢启动容器定义就绪探针配置探针HTTP 探测TCP 探测探针层面的…

JavaScript中的变量提升:解析、应用及示例

JavaScript中的变量提升是一个常见但容易令人困惑的概念。在本文中,我们将深入探讨JavaScript中的变量提升,包括其含义、用途以及通过代码示例进行解释。 什么是变量提升? 在JavaScript中,变量提升是指在代码执行前将变量声明提…

硬件基础:光耦、可控硅、继电器、达林顿管、干簧管

光耦 光电耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。 光电耦合器是一种把发光器件和光敏器件封装在同一壳体内, 中间通过电→光→电的转换来传输电信号的半导体光电子器件。其中,发光…

re:Invent2023大会隆重推出自研芯片Graviton4和Trainium2

目录 一、前言 二、体验Graviton系列产品 (一)创建普通的EC2实例 (二)创建Graviton处理器的EC2实例 (三)远程到服务器 方式1:创建成功时连接 方式2:SSH客户端 方式3:正确…

基于FPGA的视频接口之高速IO(SATA)

简介 本章节是对于高速IO接口应用的一个扩展,目前扩展为SATA(SSD硬盘,机械硬盘不能使用)。通俗易懂的讲,即把SSD硬盘当做大型的Nand Flash来处理,不格式化硬盘,直接以地址和数据的格式,在SATA盘中写入数据,该数据不能被Window和linux直接识别,需单独编写App来查看SSD…

计网期末考试复习

文章目录 对比分析计算机网络,分布式系统,主机系统的差异?七层模型每一层的主要功能?简述PCM的理论基础,为什么PCM采样时间被设置为125us?同步通信和异步通信的差异。光纤作为传输介质,相比铜芯有什么优势…

创建型模式之工厂模式

​ 本质: 实例化对象不直接使用new,而是用工厂代替 工厂模式分为: 简单工厂模式:用来生产同一等级结构中的任意产品(增加新产品需要修改已有代码)工厂方法模式:用来生产同一等级结构中的固定产…

关于找不到XINPUT1_3.dll,无法继续执行代码问题的5种不同解决方法

一、xinput1_3.dll的作用 xinput1_3.dll是Windows操作系统中的一款动态链接库文件,主要用于支持游戏手柄和游戏输入设备。这款文件属于Microsoft Xbox 360兼容性库,它包含了与游戏手柄和其他输入设备相关的功能。在游戏中,xinput1_3.dll负责…

C语言——预处理详解(#define用法+注意事项)

#define 语法规定 #define定义标识符 语法: #define name stuff #define例子 #include<stdio.h> #define A 100 #define STR "abc" #define FOR for(;;)int main() {printf("%d\n", A);printf("%s\n", STR);FOR;return 0; } 运行结果…

JRT实现在线打印预览

在JRT打印元素绘制协议一篇已经介绍过打印把绘图和打印逻辑进行了分离&#xff0c;这是和老设计最大的不同。因为老的设计时候没想着做在线预览功能&#xff0c;是后面硬性扩出来的。这次从最初设计就考虑绘图逻辑各处共用&#xff0c;包括打印预览&#xff0c;在线打印预览等、…

什么是PHP的迭代器和生成器?

PHP中的迭代器&#xff08;Iterator&#xff09;和生成器&#xff08;Generator&#xff09;是用于处理和遍历数据集合的有用工具。它们使数据遍历更加灵活、高效&#xff0c;并减少了内存消耗。以下是它们的概述&#xff1a; 迭代器&#xff08;Iterator&#xff09;&#xff…

JS代码输出题:return Promise.resolve() 情况

题目&#xff1a; Promise.resolve().then(() > {console.log(0);return Promise.resolve(4);}).then((res) > {console.log(res)})Promise.resolve().then(() > {console.log(1)}).then(() > {console.log(2)}).then(() > {console.log(3)}).then(() > {con…

MDK编译过程和文件类型

MDK是一款IDE软件&#xff0c;具有&#xff0c;编辑&#xff0c;编译&#xff0c;链接&#xff0c;下载&#xff0c;调试等等的功能。 1.编译器介绍&#xff1a; MDK可以编译C/C文件和汇编文件&#xff0c;MDK只是一款IDE软件&#xff0c;那他内部使用的是什么编译器呢&#x…

Python-折线图可视化

折线图可视化 1.JSON数据格式2.pyecharts模块介绍3.pyecharts快速入门4.创建折线图 1.JSON数据格式 1.1什么是JSON JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串 1.2主要功能json就是一种在各个编程语言中流…

JavaSE第7篇:封装

文章目录 一、封装1、好处:2、使用 二、四种权限修饰符三、构造器1、作用2、说明3、属性赋值的过程 一、封装 封装就是将类的属性私有化,提供公有的方法访问私有属性 不对外暴露打的私有的方法 单例模式 1、好处: 1.只能通过规定的方法来访问数据 2.隐藏类的实例细节,方便…

CSS篇之圆角梯形

附上一篇文章&#xff1a;梯形tab按钮-基于clip-path path函数实现 - JSRUN.NET 他这个区别在于&#xff0c;收尾两侧都是直角的&#xff0c;如图 下面这个是圆角&#xff1a; 思路&#xff1a; 代码如下&#xff1a; <template><div class"wrap"><…

时序数据库选型TimescaleDB

最近要做一个数字车间的物联网项目&#xff0c;数据存储成了首先要解决的问题&#xff0c;整个车间一共104台数控机床&#xff0c;1s钟采集1次数据&#xff0c;360024365*1043,279,744,000 &#xff0c;一年要产生32亿条记录&#xff0c;这个数据量用常见的关系型数据库肯定是不…

【C语言加油站】qsort函数的模拟实现

qsort函数的模拟实现 导言一、回调函数二、冒泡排序2.1 冒泡排序实现升序 三、qsort函数3.1 qsort函数的使用3.2 比较函数 四、通过冒泡排序模拟实现qsort函数4.1 任务需求4.2 函数参数4.3 函数定义与声明4.4 函数实现4.4.1 函数主体4.4.2 比较函数4.4.3 元素交换 4.5 my_qsort…