Как запустить потоки поочередно?

Разбираюсь с потоками, и никак не могу поять. Как запустить поток который будет идти после окончания второго?
Делал и с приоритеностю, и с Join() даже что-то пытлася(но не понял его принцып). Но все равно работает не так как я хочу.

Вообзе задача такая, сделать 3 потока. Где 2й запускает 3й поток в фоне, а 1й потом запускается после завершения 2.

class Program {
        static void Main() {
            Thread primaryThread = Thread.CurrentThread;
            primaryThread.Name = "Thread #1";


            Thread secondaryThread = new Thread(RunSecondThread);
            secondaryThread.Start();

            primaryThread.Priority = ThreadPriority.Lowest;
            secondaryThread.Priority = ThreadPriority.Highest;

            for (int counter = 0; counter < 5; counter++) {
                Console.WriteLine("{0} -> {1}", primaryThread.Name, counter);
                Thread.Sleep(200);
            }
        }

        static void RunSecondThread() {
            Thread secondaryThread = Thread.CurrentThread;
            secondaryThread.Name = "Thread #2";

            Thread thirdThread = new Thread(RunThirdThread);
            thirdThread.IsBackground = true;
            thirdThread.Start();

            for (int counter = 0; counter < 5; counter++) {
                Console.WriteLine("{0} -> {1}", secondaryThread.Name, counter);
                Thread.Sleep(500);
            }
        }

        static void RunThirdThread() {
            Thread thirdThread = Thread.CurrentThread;
            thirdThread.Name = "Thread #3";

            for (int counter = 0; counter < 5; counter++) {
                Console.WriteLine("{0} -> {1}", thirdThread.Name, counter);
                Thread.Sleep(1000);
            }
        }
    }
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
@lucky4
static void Main(string[] args) {
            Thread primaryThread = Thread.CurrentThread;
            primaryThread.Name = "Thread #1";
            primaryThread.Priority = ThreadPriority.Lowest;

            Thread secondaryThread = new Thread(RunSecondThread);
            secondaryThread.Priority = ThreadPriority.Highest;
            secondaryThread.Start();
            secondaryThread.Join();

            for (int counter = 0; counter < 5; counter++) {
                Console.WriteLine("{0} -> {1}", primaryThread.Name, counter);
                Thread.Sleep(200);
            }
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vabka Куратор тега C#
Токсичный
Join блокирует вызывающий поток, пока не завершится тот, который джоинят.
https://docs.microsoft.com/ru-ru/dotnet/api/system...
Возможно, вам нужны не потоки, а таски и async/await.
Ещё вы можете использовать коллбэки, чтобы запускать новый поток после завершения старого (но если честно, это какая-то синтетическая задача - в такой ситуации можно всё в одном потоке выполнить)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
НПК «Катрен» Новосибирск
от 90 000 ₽
WB—Tech Москва
от 140 000 до 160 000 ₽
от 3 500 до 4 000 $
06 мар. 2021, в 02:23
120000 руб./за проект
06 мар. 2021, в 00:29
500 руб./за проект
05 мар. 2021, в 23:28
1200 руб./за проект