Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. 剛剛查看一下今天底下的烤披薩之非同步設計程式碼,又發現到一個問題點。
  2.  
  3. 從這三行程式碼可以看的出來,這裡產生了三個非同步工作,不過,對於 t2, t3 這兩個非同步工作,似乎與實際真實環境下有很大的落差;
  4. 這代表了這個製作披薩的廚師,可以同時製作麵糰、又可以準備配料,對於一人真實的人而言,要同時做到這兩件事情,真的有很大的困難,除非:
  5.  
  6. * 這個廚房有多個廚師,每個廚師都只做一件事情(類似 F1賽車的簡報內容),可以,事前有說明,這裡僅有一個廚師,要來做披薩
  7. * 使用機器人,可是,也需要要多組機器人,或者一個機器人有多個機械手臂,似乎才能夠做到這樣的設計
  8.  
  9. 因此,在進行非同步程式設計的時候,要進行這些非同步的程式碼是否真的可以在規劃情境下,真實的運行起來。
  10.  
  11. ```csharp
  12. var t1 = Task.Run(烤箱預熱);
  13. var t2 = Task.Run(製作麵團).ContinueWith( task => { 發麵(); },TaskContinuationOptions.OnlyOnRanToCompletion);
  14. var t3 = Task.Run(準備醬料).ContinueWith(task => { 準備配料(); }, TaskContinuationOptions.OnlyOnRanToCompletion);
  15.  
  16. Task.WaitAll(t2, t3)
  17. ```
  18.  
  19. 完整原始碼
  20.  
  21. ```csharp
  22. var watch = Stopwatch.StartNew();
  23. Console.WriteLine("開始進行製作披薩...");
  24.  
  25. var t1 = Task.Run(烤箱預熱);
  26. var t2 = Task.Run(製作麵團).ContinueWith( task => { 發麵(); },TaskContinuationOptions.OnlyOnRanToCompletion);
  27. var t3 = Task.Run(準備醬料).ContinueWith(task => { 準備配料(); }, TaskContinuationOptions.OnlyOnRanToCompletion);
  28.  
  29. Task.WaitAll(t2, t3);
  30. var t4 = Task.Run(製作披薩餅皮與塗抹醬料和放置配料);
  31. Task.WaitAll(t1, t4);
  32. Task t5 = Task.Run(烤製披薩);
  33. Task t6 = Task.Run(準備餐具與飲料);
  34.  
  35. Task.WaitAll(t5, t6);
  36. Task t7 = Task.Run(披薩完成_開始食用);
  37.  
  38. Task.WaitAll(t7);
  39. watch.Stop();
  40.  
  41. Console.WriteLine($"同步設計披薩製作共花費:{watch.Elapsed.Seconds} 秒");
  42. Console.WriteLine("Press any key to continue...");
  43. Console.ReadKey();
  44. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement