[問題] 請教這種情形下thread的寫法

看板C_Sharp (C#)作者 (努力)時間10月前 (2023/06/30 00:52), 編輯推噓4(4018)
留言22則, 6人參與, 9月前最新討論串1/1
大家好: 小弟現在有一問題關於多線程的設計, 如果現在有2個線程: ThreadA 及 THreadB, 如果想要 ThreadA 完成後, 再開始做 ThreadB, 請問要怎樣寫比較好??? P.S. ThreadA 及 THreadB 都各自己需要得到收到某些訊息後才算是完成工作 using System; using System.Threading; class Program { static void Main(strin g[] args) { Thread t1 = new Thread(WorkA); t1.Start(); Thread t2 = new THread(WorKB); t2.Start(); } 以上這樣會兩件事一起做.. 不是 ThreadA完全完成後到ThreadB開始 } 謝謝各位指導 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.71.203 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1688057553.A.E0E.html

06/30 01:13, 10月前 , 1F
t1.Start(); //下一行接 t1.Join();
06/30 01:13, 1F

06/30 01:19, 10月前 , 2F

06/30 12:34, 10月前 , 3F
在workA裡面呼叫t2 start
06/30 12:34, 3F

06/30 19:09, 10月前 , 4F
將WorkB放在WorkA後面比較不易控制流程呢.謝謝您
06/30 19:09, 4F

07/05 23:30, 9月前 , 5F
改用Task吧
07/05 23:30, 5F

07/06 10:23, 9月前 , 6F
WorkB要等WorkA完成的話不應該用兩個thread,應該就是一個
07/06 10:23, 6F

07/06 10:23, 9月前 , 7F
thread配一個queue去跑才對 (在現成包裝好的lib這個通常叫
07/06 10:23, 7F

07/06 10:23, 9月前 , 8F
做executor或scheduler)
07/06 10:23, 8F

07/06 10:28, 9月前 , 9F
當然記得要用single thread executor/scheduler
07/06 10:28, 9F

07/06 10:36, 9月前 , 10F
如果需求再複雜一點,其實不止是一個thread可滿足的,最終
07/06 10:36, 10F

07/06 10:36, 9月前 , 11F
還是要有個地方去寫流程控制,當然不建議寫在Work裡
07/06 10:36, 11F

07/06 10:40, 9月前 , 12F
把工作排進scheduler通常會回個可用來控制的物件,假設就叫
07/06 10:40, 12F

07/06 10:42, 9月前 , 13F
Task,通常會提供wait、cancel、run next之類的控制方法
07/06 10:42, 13F

07/06 14:25, 9月前 , 14F
抱歉是不是我資質駑鈍...
07/06 14:25, 14F

07/06 14:25, 9月前 , 15F
ThreadA執行WorkA,ThreadB執行WorkB
07/06 14:25, 15F

07/06 14:26, 9月前 , 16F
想要 ThreadA 完成後, 再開始做 ThreadB
07/06 14:26, 16F

07/06 14:26, 9月前 , 17F
但原PO卻說將WorkB放在WorkA後面比較不易控制流程
07/06 14:26, 17F

07/06 15:53, 9月前 , 18F
原PO的意思應該是「在workA裡面呼叫t2 start」,把控制流程
07/06 15:53, 18F

07/06 15:54, 9月前 , 19F
程式寫到原本單純的Work中不好
07/06 15:54, 19F

07/06 15:56, 9月前 , 20F
當然其實不需要去改WorkA裡面,而是把t1執行的東西改成
07/06 15:56, 20F

07/06 15:59, 9月前 , 21F
() => { WorkA(); //呼叫t2 start } 就好了
07/06 15:59, 21F

07/07 15:55, 9月前 , 22F
我猜原po只是單純簡化狀況吧
07/07 15:55, 22F
文章代碼(AID): #1adRRHuE (C_Sharp)
文章代碼(AID): #1adRRHuE (C_Sharp)