看板 C_Sharp 關於我們 聯絡資訊
大家好: 小弟現在有一問題關於多線程的設計, 如果現在有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
braverycloud: t1.Start(); //下一行接 t1.Join(); 06/30 01:13
braverycloud: https://reurl.cc/3x6988 06/30 01:19
s4300026: 在workA裡面呼叫t2 start 06/30 12:34
WillBeFine: 將WorkB放在WorkA後面比較不易控制流程呢.謝謝您 06/30 19:09
Litfal: 改用Task吧 07/05 23:30
ssccg: WorkB要等WorkA完成的話不應該用兩個thread,應該就是一個 07/06 10:23
ssccg: thread配一個queue去跑才對 (在現成包裝好的lib這個通常叫 07/06 10:23
ssccg: 做executor或scheduler) 07/06 10:23
ssccg: 當然記得要用single thread executor/scheduler 07/06 10:28
ssccg: 如果需求再複雜一點,其實不止是一個thread可滿足的,最終 07/06 10:36
ssccg: 還是要有個地方去寫流程控制,當然不建議寫在Work裡 07/06 10:36
ssccg: 把工作排進scheduler通常會回個可用來控制的物件,假設就叫 07/06 10:40
ssccg: Task,通常會提供wait、cancel、run next之類的控制方法 07/06 10:42
kobe8112: 抱歉是不是我資質駑鈍... 07/06 14:25
kobe8112: ThreadA執行WorkA,ThreadB執行WorkB 07/06 14:25
kobe8112: 想要 ThreadA 完成後, 再開始做 ThreadB 07/06 14:26
kobe8112: 但原PO卻說將WorkB放在WorkA後面比較不易控制流程 07/06 14:26
ssccg: 原PO的意思應該是「在workA裡面呼叫t2 start」,把控制流程 07/06 15:53
ssccg: 程式寫到原本單純的Work中不好 07/06 15:54
ssccg: 當然其實不需要去改WorkA裡面,而是把t1執行的東西改成 07/06 15:56
ssccg: () => { WorkA(); //呼叫t2 start } 就好了 07/06 15:59
Litfal: 我猜原po只是單純簡化狀況吧 07/07 15:55
chchwy: A做完才做B,聽起來就不需要Thread 呀 08/08 22:40
Roleman: 那你用單緒做就可以啦 08/13 09:38