Я смотрю этот сайт для threads. Я играл с кодом, чтобы ответить на вопрос: «Does CountdownEvent остановить все потоки?» ответа у меня нет. Затем я решил сыграть с номером, который передается в CountdownEvent. Вот мой кодCountDownEvent не будет ждать, пока все сигналы не будут вызваны
namespace ThreadPractice
{
class Program
{
static CountdownEvent CountDown = new CountdownEvent(4);
static void Main()
{
new Thread(() => SaySomething("I am Thread one.")).Start();
new Thread(() => SaySomething("I am thread two.")).Start();
new Thread(() => SaySomethingElse("Hello From a different Thread")).Start();
new Thread(() => SaySomething("I am Thread Three.")).Start();
CountDown.Wait();
Console.Read();
}
static void SaySomething(string Something)
{
Thread.Sleep(1000);
Console.WriteLine(Something);
CountDown.Signal();
}
static void SaySomethingElse(string SomethingElse)
{
Thread.Sleep(1000);
Console.WriteLine(SomethingElse);
}
}
}
Я ожидаю, что поток, вызывающий SaySomethingELse() для выполнения, но остальные потоки выполняются так же, даже если только четыре сигналы были вызваны.
Почему это так?
Спасибо,
dhoehna
Почему вы ожидали бы другие темы * не * для выполнения? Только ваш основной поток использует 'Wait'. Остальные просто * сигнализируют * обратный отсчет. –
Я бы ожидал, что все потоки будут запускать и печатать что-то, а затем для вашей программы блокировать навсегда вызов 'CountDown.Wait()'. Точкой отсчета является блокировка * одного потока *, пока куча других потоков не сообщит, что безопасно продолжать. – dlev
@dlev Что случилось, так это то, что я забыл вызвать wait на всех потоках. Я подумал, что ждать было простое заявление. –