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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com