作者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/cn.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