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();
    }

}

执行结果

相关推荐
MyBFuture几秒前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
程序 代码狂人17 分钟前
CentOS7初始化配置操作
linux·运维·开发语言·php
从此不归路19 分钟前
Qt5 进阶【13】桌面 Qt 项目架构设计:从 MVC/MVVM 到模块划分
开发语言·c++·qt·架构·mvc
zhangx1234_20 分钟前
C语言 数据在内存中的存储
c语言·开发语言
星空露珠21 分钟前
速算24点检测生成核心lua
开发语言·数据库·算法·游戏·lua
老蒋每日coding22 分钟前
Python3基础练习题详解,从入门到熟练的 50 个实例(一)
开发语言·python
历程里程碑25 分钟前
Linux15 进程二
linux·运维·服务器·开发语言·数据结构·c++·笔记
lly20240628 分钟前
网站主机提供商:如何选择最适合您的服务
开发语言
HAPPY酷28 分钟前
构建即自由:一份为创造者设计的 Windows C++ 自动化构建指南
开发语言·c++·ide·windows·python·策略模式·visual studio
工一木子29 分钟前
Java 的前世今生:从 Oak 到现代企业级语言
java·开发语言