C#使用Task實現並行編程
故事背景
透著紗的窗外的陽光, 又是一個星期一.
慢慢來
一看時間, 還早, 那麼蹦躂起來
- 穿衣
- 刷牙
- 洗臉
用代碼來說的話, 應該是這樣:
// Program.cs using System; using System.Diagnostics; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("早起三件事開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Dress(); BrushTeeth(); WashFace(); sw.Stop(); Console.WriteLine($"...早起三件事完成, 總耗時 {sw.Elapsed.Seconds} 秒"); Console.ReadKey(); } /// <summary> /// 穿衣 /// </summary> static void Dress() { Console.WriteLine($"穿衣開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1)); sw.Stop(); Console.WriteLine($"...穿衣完成, 耗時 {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 刷牙 /// </summary> static void BrushTeeth() { Console.WriteLine($"刷牙開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3)); sw.Stop(); Console.WriteLine($"...刷牙完成, 耗時 {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 洗臉 /// </summary> static void WashFace() { Console.WriteLine($"洗臉開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5)); sw.Stop(); Console.WriteLine($"...系列完成, 耗時 {sw.Elapsed.Seconds} 秒"); } } }
運行之後, 等待一會, 會看到如下輸出:
早起三件事開始…
穿衣開始…
…穿衣完成, 耗時 1 秒
刷牙開始…
…刷牙完成, 耗時 3 秒
洗臉開始…
…系列完成, 耗時 5 秒
…早起三件事完成, 總耗時 9 秒
一件一件事慢慢來, 總耗時 9 秒…
趕時間
一看時間, 哎呦我去, 快遲到瞭, 穿衣 & 刷牙 & 洗臉一起來吧…別問我現實中怎麼實現的
總而言之代碼是這樣滴:
// Program.cs using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("早起三件事開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Task dressTask = Task.Factory.StartNew(action: Dress); Task brushTeethTask = Task.Factory.StartNew(action: BrushTeeth); Task washFaceTask = Task.Factory.StartNew(action: WashFace); Task.WaitAll(dressTask, brushTeethTask, washFaceTask); sw.Stop(); Console.WriteLine($"...早起三件事完成, 總耗時 {sw.Elapsed.Seconds} 秒"); Console.ReadKey(); } /// <summary> /// 穿衣 /// </summary> static void Dress() { Console.WriteLine($"穿衣開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1)); sw.Stop(); Console.WriteLine($"...穿衣完成, 耗時 {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 刷牙 /// </summary> static void BrushTeeth() { Console.WriteLine($"刷牙開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3)); sw.Stop(); Console.WriteLine($"...刷牙完成, 耗時 {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 洗臉 /// </summary> static void WashFace() { Console.WriteLine($"洗臉開始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5)); sw.Stop(); Console.WriteLine($"...系列完成, 耗時 {sw.Elapsed.Seconds} 秒"); } } }
啟動運行之後, 等待一會, 你應該會看到如下輸出:
早起三件事開始…
刷牙開始…
洗臉開始…
穿衣開始…
…穿衣完成, 耗時 1 秒
…刷牙完成, 耗時 3 秒
…系列完成, 耗時 5 秒
…早起三件事完成, 總耗時 5 秒
可以看到, 幾件事一起幹瞭, 總耗時隻用瞭 5 秒.
總結一下
幾件事一起幹(並行), 比一件一件事慢慢來
- 要省時間, 但是要多寫點代碼, 更耗體力.
- 可以使用
Task
來輕松實現並行操作. - …
以上就是這篇文章的全部內容瞭,希望本文的內容對大傢的學習或者工作具有一定的參考學習價值,謝謝大傢對WalkonNet的支持。如果你想瞭解更多相關內容請查看下面相關鏈接
推薦閱讀:
- 一篇文章弄懂C#中的async和await
- C#多線程系列之多階段並行線程
- c# 並行和多線程編程——認識Parallel
- Java Stopwatch類,性能與時間計時器案例詳解
- 如何使用C# Stopwatch 測量微秒級精確度