[问题] 请教这种情形下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