zoukankan      html  css  js  c++  java
  • C# -- 使用 Task 执行多线程任务

    C# -- 使用 Task 执行多线程任务

    1. 使用 Task 执行多线程任务

        class Program
        {
            static void Main(string[] args)
            {
                Task task1 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(10000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                Task task2 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(20000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                Task task3 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(15000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                task1.Start();
                task2.Start();
                task3.Start();
    
                Console.ReadKey();
            }
    
            static long SumNumbers(int count)
            {
                long sum = 0;
                for (int i = 0; i < count; i++)
                {
                    sum += i;
                }
                Thread.Sleep(3000);
                return sum;
            }
        }

    执行结果:

    2. 等待Task多线程任务执行完成

        class Program
        {
            static void Main(string[] args)
            {
                Task task1 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(10000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                Task task2 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(20000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                Task task3 = new Task(() => {
                    Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
                    Stopwatch stw = new Stopwatch();
                    stw.Start();
                    long result = SumNumbers(15000000);
                    stw.Stop();
                    Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
                });
    
                List<Task> listTask = new List<Task>();
                listTask.Add(task1);
                listTask.Add(task2);
                listTask.Add(task3);
    
                task1.Start();
                task2.Start();
                task3.Start();
    
                Task.WaitAll(listTask.ToArray());
                Console.WriteLine("所有线程执行完成。");
    
                Console.ReadKey();
            }
    
            static long SumNumbers(int count)
            {
                long sum = 0;
                for (int i = 0; i < count; i++)
                {
                    sum += i;
                }
                Thread.Sleep(3000);
                return sum;
            }
        }

    执行结果:

  • 相关阅读:
    Vue
    前端笔试、面试题
    npm下载文件临时目录、实际存放目录路劲
    ES6
    Electron – 基础学习(3): 项目打包成exe桌面应用 之electron-builder
    Electron+Vue – 基础学习(2): 项目打包成exe桌面应用
    Electron+Vue – 基础学习(1): 创建项目
    软件需求膨胀系数
    职业女性确实处于劣势吗?记一次不甚严谨的考据 -- 向胡适之先生的遥远致敬
    15篇干货博客 38本书 4门公开课 减掉20斤体重 我的2014总结
  • 原文地址:https://www.cnblogs.com/ChengWenHao/p/CSharpTask.html
Copyright © 2011-2022 走看看