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

}

执行结果 

相关推荐

  1. C语言线编程-线同步

    2023-12-12 14:40:02       54 阅读
  2. c# 线创建及线同步

    2023-12-12 14:40:02       37 阅读
  3. C++线同步

    2023-12-12 14:40:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 14:40:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 14:40:02       97 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 14:40:02       78 阅读
  4. Python语言-面向对象

    2023-12-12 14:40:02       88 阅读

热门阅读

  1. kafka 常用命令【学习笔记】

    2023-12-12 14:40:02       56 阅读
  2. C++ 中的引用

    2023-12-12 14:40:02       60 阅读
  3. 一文带你了解状态机思维

    2023-12-12 14:40:02       62 阅读
  4. 互联网商业史--1.3Q大战

    2023-12-12 14:40:02       60 阅读
  5. 数据库常见的锁

    2023-12-12 14:40:02       51 阅读
  6. 有了 webapi 后 webService 被淘汰了吗?

    2023-12-12 14:40:02       58 阅读
  7. ES6-import后是否有{}的区别

    2023-12-12 14:40:02       42 阅读
  8. 排序算法——选择排序

    2023-12-12 14:40:02       58 阅读
  9. oh-my-zsh 安装和配置

    2023-12-12 14:40:02       54 阅读