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

 

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

复制代码
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Task task1 = new Task(() => {
 6                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
 7                 Stopwatch stw = new Stopwatch();
 8                 stw.Start();
 9                 long result = SumNumbers(10000000);
10                 stw.Stop();
11                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
12             });
13 
14             Task task2 = new Task(() => {
15                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
16                 Stopwatch stw = new Stopwatch();
17                 stw.Start();
18                 long result = SumNumbers(20000000);
19                 stw.Stop();
20                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
21             });
22 
23             Task task3 = new Task(() => {
24                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
25                 Stopwatch stw = new Stopwatch();
26                 stw.Start();
27                 long result = SumNumbers(15000000);
28                 stw.Stop();
29                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
30             });
31 
32             task1.Start();
33             task2.Start();
34             task3.Start();
35 
36             Console.ReadKey();
37         }
38 
39         static long SumNumbers(int count)
40         {
41             long sum = 0;
42             for (int i = 0; i < count; i++)
43             {
44                 sum += i;
45             }
46             Thread.Sleep(3000);
47             return sum;
48         }
49     }
复制代码

执行结果:

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

复制代码
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Task task1 = new Task(() => {
 6                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
 7                 Stopwatch stw = new Stopwatch();
 8                 stw.Start();
 9                 long result = SumNumbers(10000000);
10                 stw.Stop();
11                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
12             });
13 
14             Task task2 = new Task(() => {
15                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
16                 Stopwatch stw = new Stopwatch();
17                 stw.Start();
18                 long result = SumNumbers(20000000);
19                 stw.Stop();
20                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
21             });
22 
23             Task task3 = new Task(() => {
24                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
25                 Stopwatch stw = new Stopwatch();
26                 stw.Start();
27                 long result = SumNumbers(15000000);
28                 stw.Stop();
29                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
30             });
31 
32             List<Task> listTask = new List<Task>();
33             listTask.Add(task1);
34             listTask.Add(task2);
35             listTask.Add(task3);
36 
37             task1.Start();
38             task2.Start();
39             task3.Start();
40 
41             Task.WaitAll(listTask.ToArray());
42             Console.WriteLine("所有线程执行完成。");
43 
44             Console.ReadKey();
45         }
46 
47         static long SumNumbers(int count)
48         {
49             long sum = 0;
50             for (int i = 0; i < count; i++)
51             {
52                 sum += i;
53             }
54             Thread.Sleep(3000);
55             return sum;
56         }
57     }
复制代码

执行结果:

 

posted @   编程世界里晃荡  阅读(5206)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示