※ 本文轉寄自 ptt.cc, 文章原始頁面
看板C_Sharp
標題

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

時間
最新2023-08-13 09:38:00
留言24則留言,8人參與討論
推噓6 ( 6018 )
大家好: 小弟現在有一問題關於多線程的設計, 如果現在有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

24 則留言

braverycloud, 1F
t1.Start(); //下一行接 t1.Join();

braverycloud, 2F

s4300026, 3F
在workA裡面呼叫t2 start

WillBeFine, 4F
將WorkB放在WorkA後面比較不易控制流程呢.謝謝您

Litfal, 5F
改用Task吧

ssccg, 6F
WorkB要等WorkA完成的話不應該用兩個thread,應該就是一個

ssccg, 7F
thread配一個queue去跑才對 (在現成包裝好的lib這個通常叫

ssccg, 8F
做executor或scheduler)

ssccg, 9F
當然記得要用single thread executor/scheduler

ssccg, 10F
如果需求再複雜一點,其實不止是一個thread可滿足的,最終

ssccg, 11F
還是要有個地方去寫流程控制,當然不建議寫在Work裡

ssccg, 12F
把工作排進scheduler通常會回個可用來控制的物件,假設就叫

ssccg, 13F
Task,通常會提供wait、cancel、run next之類的控制方法

kobe8112, 14F
抱歉是不是我資質駑鈍...

kobe8112, 15F
ThreadA執行WorkA,ThreadB執行WorkB

kobe8112, 16F
想要 ThreadA 完成後, 再開始做 ThreadB

kobe8112, 17F
但原PO卻說將WorkB放在WorkA後面比較不易控制流程

ssccg, 18F
原PO的意思應該是「在workA裡面呼叫t2 start」,把控制流程

ssccg, 19F
程式寫到原本單純的Work中不好

ssccg, 20F
當然其實不需要去改WorkA裡面,而是把t1執行的東西改成

ssccg, 21F
() => { WorkA(); //呼叫t2 start } 就好了

Litfal, 22F
我猜原po只是單純簡化狀況吧

chchwy, 23F
A做完才做B,聽起來就不需要Thread 呀

Roleman, 24F
那你用單緒做就可以啦

WillBeFine 作者的近期文章

[請益] 請教Ryzen 9 7900 的塔扇
-------------------------------開菜單請用[菜單]------------------------------ 請教各位: 關於塔扇, 請各位幫忙推薦.. CPU: AMD Ryzen 9 7900 MB: M
更多 WillBeFine 作者的文章...