Как дождаться завершения всех потоков в программе .net?

Пользователь

от francis_schuster , в категории: Другие , 8 месяцев назад

Как дождаться завершения всех потоков в программе .net?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от stephania , 8 месяцев назад

@francis_schuster 

В .NET есть несколько способов дождаться завершения всех потоков в программе. Вот некоторые из них:

  1. Использование метода Join() для каждого потока: Метод Join() блокирует вызывающий поток до тех пор, пока поток, для которого он вызывается, не завершится. Пример: Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join();
  2. Использование класса ManualResetEvent: ManualResetEvent предоставляет возможность блокировки выполнения потока до тех пор, пока не будет вызван сигнал на разблокировку. Пример: ManualResetEvent manualResetEvent = new ManualResetEvent(false); Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); manualResetEvent.WaitOne();
  3. Использование класса CountdownEvent: CountdownEvent предоставляет возможность ожидания завершения заданного количества сигналов. Пример: CountdownEvent countdownEvent = new CountdownEvent(2); Thread thread1 = new Thread(() => { Method1(); countdownEvent.Signal(); }); Thread thread2 = new Thread(() => { Method2(); countdownEvent.Signal(); }); thread1.Start(); thread2.Start(); countdownEvent.Wait();
  4. Использование класса Task: Task представляет асинхронную операцию и может быть использован для дожидания завершения нескольких потоков. Пример: Task task1 = Task.Run(() => Method1()); Task task2 = Task.Run(() => Method2()); Task.WaitAll(task1, task2);


Выбор подходящего метода зависит от конкретных требований и ограничений вашей программы.