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     }

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM