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

