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