C#使用Task實現(xiàn)并行編程
故事背景
透著紗的窗外的陽光, 又是一個星期一.
慢慢來
一看時間, 還早, 那么蹦跶起來
- 穿衣
- 刷牙
- 洗臉
用代碼來說的話, 應(yīng)該是這樣:
// 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 秒...
趕時間
一看時間, 哎呦我去, 快遲到了, 穿衣 & 刷牙 & 洗臉一起來吧...別問我現(xiàn)實中怎么實現(xiàn)的
總而言之代碼是這樣滴:
// 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} 秒"); } } }
啟動運行之后, 等待一會, 你應(yīng)該會看到如下輸出:
早起三件事開始...
刷牙開始...
洗臉開始...
穿衣開始...
...穿衣完成, 耗時 1 秒
...刷牙完成, 耗時 3 秒
...系列完成, 耗時 5 秒
...早起三件事完成, 總耗時 5 秒
可以看到, 幾件事一起干了, 總耗時只用了 5 秒.
總結(jié)一下
幾件事一起干(并行), 比一件一件事慢慢來
- 要省時間, 但是要多寫點代碼, 更耗體力.
- 可以使用
Task
來輕松實現(xiàn)并行操作. - ...
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
C#/.Net 中快速批量給SQLite數(shù)據(jù)庫插入測試數(shù)據(jù)
這篇文章主要介紹了C#/.Net 中快速批量給SQLite數(shù)據(jù)庫插入測試數(shù)據(jù),本文直接給出實例代碼,需要的朋友可以參考下2015-06-06C#開發(fā)WinForm根據(jù)條件改變DataGridView行顏色
這篇文章介紹了C#開發(fā)WinForm根據(jù)條件改變DataGridView行顏色的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03C#查詢SqlServer數(shù)據(jù)庫并返回單個值的方法
這篇文章主要介紹了C#查詢SqlServer數(shù)據(jù)庫并返回單個值的方法,涉及C#操作SQLServer數(shù)據(jù)庫查詢的相關(guān)技巧,需要的朋友可以參考下2015-06-06