C#使用Task實(shí)現(xiàn)并行編程
故事背景
透著紗的窗外的陽(yáng)光, 又是一個(gè)星期一.
慢慢來(lái)
一看時(shí)間, 還早, 那么蹦跶起來(lái)
- 穿衣
- 刷牙
- 洗臉
用代碼來(lái)說(shuō)的話, 應(yīng)該是這樣:
// Program.cs using System; using System.Diagnostics; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("早起三件事開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Dress(); BrushTeeth(); WashFace(); sw.Stop(); Console.WriteLine($"...早起三件事完成, 總耗時(shí) {sw.Elapsed.Seconds} 秒"); Console.ReadKey(); } /// <summary> /// 穿衣 /// </summary> static void Dress() { Console.WriteLine($"穿衣開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1)); sw.Stop(); Console.WriteLine($"...穿衣完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 刷牙 /// </summary> static void BrushTeeth() { Console.WriteLine($"刷牙開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3)); sw.Stop(); Console.WriteLine($"...刷牙完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 洗臉 /// </summary> static void WashFace() { Console.WriteLine($"洗臉開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5)); sw.Stop(); Console.WriteLine($"...系列完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } } }
運(yùn)行之后, 等待一會(huì), 會(huì)看到如下輸出:
早起三件事開(kāi)始...
穿衣開(kāi)始...
...穿衣完成, 耗時(shí) 1 秒
刷牙開(kāi)始...
...刷牙完成, 耗時(shí) 3 秒
洗臉開(kāi)始...
...系列完成, 耗時(shí) 5 秒
...早起三件事完成, 總耗時(shí) 9 秒
一件一件事慢慢來(lái), 總耗時(shí) 9 秒...
趕時(shí)間
一看時(shí)間, 哎呦我去, 快遲到了, 穿衣 & 刷牙 & 洗臉一起來(lái)吧...別問(wèn)我現(xiàn)實(shí)中怎么實(shí)現(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("早起三件事開(kāi)始..."); 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($"...早起三件事完成, 總耗時(shí) {sw.Elapsed.Seconds} 秒"); Console.ReadKey(); } /// <summary> /// 穿衣 /// </summary> static void Dress() { Console.WriteLine($"穿衣開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1)); sw.Stop(); Console.WriteLine($"...穿衣完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 刷牙 /// </summary> static void BrushTeeth() { Console.WriteLine($"刷牙開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3)); sw.Stop(); Console.WriteLine($"...刷牙完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } /// <summary> /// 洗臉 /// </summary> static void WashFace() { Console.WriteLine($"洗臉開(kāi)始..."); Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5)); sw.Stop(); Console.WriteLine($"...系列完成, 耗時(shí) {sw.Elapsed.Seconds} 秒"); } } }
啟動(dòng)運(yùn)行之后, 等待一會(huì), 你應(yīng)該會(huì)看到如下輸出:
早起三件事開(kāi)始...
刷牙開(kāi)始...
洗臉開(kāi)始...
穿衣開(kāi)始...
...穿衣完成, 耗時(shí) 1 秒
...刷牙完成, 耗時(shí) 3 秒
...系列完成, 耗時(shí) 5 秒
...早起三件事完成, 總耗時(shí) 5 秒
可以看到, 幾件事一起干了, 總耗時(shí)只用了 5 秒.
總結(jié)一下
幾件事一起干(并行), 比一件一件事慢慢來(lái)
- 要省時(shí)間, 但是要多寫(xiě)點(diǎn)代碼, 更耗體力.
- 可以使用
Task
來(lái)輕松實(shí)現(xiàn)并行操作. - ...
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C#/.Net 中快速批量給SQLite數(shù)據(jù)庫(kù)插入測(cè)試數(shù)據(jù)
這篇文章主要介紹了C#/.Net 中快速批量給SQLite數(shù)據(jù)庫(kù)插入測(cè)試數(shù)據(jù),本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色
這篇文章介紹了C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03unity實(shí)現(xiàn)車(chē)方向盤(pán)轉(zhuǎn)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)車(chē)方向盤(pán)轉(zhuǎn)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#查詢(xún)SqlServer數(shù)據(jù)庫(kù)并返回單個(gè)值的方法
這篇文章主要介紹了C#查詢(xún)SqlServer數(shù)據(jù)庫(kù)并返回單個(gè)值的方法,涉及C#操作SQLServer數(shù)據(jù)庫(kù)查詢(xún)的相關(guān)技巧,需要的朋友可以參考下2015-06-06unity實(shí)現(xiàn)物體延時(shí)出現(xiàn)
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)物體延時(shí)出現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04