Skip to content

Instantly share code, notes, and snippets.

@yohey03518
Created September 20, 2020 03:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yohey03518/d1b8b770d867e57d8cfdb4e8dfb26937 to your computer and use it in GitHub Desktop.
Save yohey03518/d1b8b770d867e57d8cfdb4e8dfb26937 to your computer and use it in GitHub Desktop.
D004
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace D004.同步設計披薩製作
{
class Program
{
static async Task Main(string[] args)
{
var watch = Stopwatch.StartNew();
Console.WriteLine("開始進行製作披薩...");
var task烤箱預熱 = Task.Run(烤箱預熱);
var task準備餐具與飲料 = Task.Run(準備餐具與飲料);
var task製作麵團 = Task.Run(製作麵團);
var task準備醬料 = Task.Run(準備醬料);
var task準備配料 = Task.Run(準備配料);
var task發麵 = task製作麵團.ContinueWith((t) => { 發麵(); });
var task製作披薩餅皮與塗抹醬料和配置配料 = Task.WhenAll(task發麵, task準備醬料, task準備配料).ContinueWith((t) =>
{
製作披薩餅皮與塗抹醬料和放置配料();
});
var task烤製披薩 = Task.WhenAll(task製作披薩餅皮與塗抹醬料和配置配料, task烤箱預熱).ContinueWith((t) => { 烤製披薩(); });
await Task.WhenAll(task烤製披薩, task準備餐具與飲料).ContinueWith((t) => { 披薩完成_開始食用(); });
watch.Stop();
Console.WriteLine($"同步設計披薩製作共花費:{watch.Elapsed.TotalMilliseconds} 毫秒");
}
static void 烤箱預熱()
{
Console.WriteLine($"烤箱預熱中,預計 3 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(3000);
Console.WriteLine($"烤箱預熱 完成");
}
static void 製作麵團()
{
Console.WriteLine($"製作麵團中,預計 0.3 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(300);
Console.WriteLine($"麵團製作 完成");
}
static void 發麵()
{
Console.WriteLine($"麵團發麵中,預計 0.8 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(800);
Console.WriteLine($"麵團發麵 完成");
}
static void 準備醬料()
{
Console.WriteLine($"準備醬料中,預計 0.2 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(200);
Console.WriteLine($"準備醬料 完成");
}
static void 準備配料()
{
Console.WriteLine($"準備配料中,預計 0.2 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(200);
Console.WriteLine($"準備配料 完成");
}
static void 製作披薩餅皮與塗抹醬料和放置配料()
{
Console.WriteLine($"製作披薩餅皮與塗抹醬料和放置配料中,預計 0.3 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(300);
Console.WriteLine($"製作披薩餅皮與塗抹醬料和放置配料 完成");
}
static void 烤製披薩()
{
Console.WriteLine($"烤製披薩中,預計 0.6 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(600);
Console.WriteLine($"烤製披薩 完成");
}
static void 準備餐具與飲料()
{
Console.WriteLine($"準備餐具與飲料中,預計 0.2 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(200);
Console.WriteLine($"準備餐具與飲料 完成");
}
static void 披薩完成_開始食用()
{
Console.WriteLine($"披薩完成_開始食用,預計 1 秒鐘 [Thread:{Thread.CurrentThread.ManagedThreadId}]");
Thread.Sleep(100);
Console.WriteLine($"披薩完成_開始食用 完成");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment