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

}

执行结果

相关推荐
筱璦3 分钟前
期货软件开发「启动加载页 / 初始化窗口」
前端·c#·策略模式·期货
咚为7 分钟前
Rust 跨平台编译实战:从手动配置到 Cross 容器化
开发语言·后端·rust
永远睡不够的入10 分钟前
C++STL详解2:stack和queue
开发语言·c++
宵时待雨20 分钟前
C++笔记归纳11:多态
开发语言·c++·笔记
小道士写程序27 分钟前
Babylon.js WebGPU Ocean Demo — 完整踩坑记录
开发语言·javascript·ecmascript
Code知行合壹33 分钟前
JDK10新特性
开发语言·jdk
qq_3907603933 分钟前
简单的线程安全日志记录器
开发语言·数据库·c#
T1an-141 分钟前
C++11智能指针shared_ptr的控制块内都有什么?
开发语言·c++
迈巴赫车主1 小时前
天梯赛 L2-004 这是二叉搜索树吗?java
java·开发语言·数据结构·算法·天梯赛
小鸡吃米…1 小时前
基准测试与性能分析
开发语言·python