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

写在前面

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

代码实现

cs 复制代码
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();
    }

}

执行结果

相关推荐
xiaoshuaishuai813 小时前
C# 实现不掉线的CRM
开发语言·c#
YuanDaima204813 小时前
大语言模型生命周期全链路解析:从架构基石到高效推理
开发语言·人工智能·python·语言模型·架构·transformer
bike兔兔13 小时前
Python实现CSV文件转Excel,一键格式转换办公小脚本
开发语言·windows·python
XMYX-014 小时前
goroutine 为什么没有返回值?(Go 并发核心设计思想)
开发语言·golang
三棱球14 小时前
Java 基础教程 Day2:从数据类型到面向对象核心概念
java·开发语言
handler0114 小时前
Linux: 基本指令知识点(3)
linux·服务器·c语言·开发语言·c++·笔记
fengci.14 小时前
ctfshow其他(web408-web432)
android·开发语言·前端·学习·php
云深麋鹿14 小时前
C++ | 容器list
开发语言·c++·容器·list
deviant-ART14 小时前
java stream 的 findFirst 和 findAny 踩坑点
java·开发语言·后端
Hical_W14 小时前
C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API
开发语言·c++·github