Я хочу уточнить, как работает следующий код. Я изложил свои сомнения, чтобы получить ваш ответ.Уточнение AutoResetEvent
class AutoResetEventDemo
{
static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main()
{
Console.WriteLine("...Main starting...");
ThreadPool.QueueUserWorkItem
(new WaitCallback(CodingInCSharp), autoEvent);
if(autoEvent.WaitOne(1000, false))
{
Console.WriteLine("Coding singalled(coding finished)");
}
else
{
Console.WriteLine("Timed out waiting for coding");
}
Console.WriteLine("..Main ending...");
Console.ReadKey(true);
}
static void CodingInCSharp(object stateInfo)
{
Console.WriteLine("Coding Begins.");
Thread.Sleep(new Random().Next(100, 2000));
Console.WriteLine("Coding Over");
((AutoResetEvent)stateInfo).Set();
}
}
static AutoResetEvent autoEvent = new AutoResetEvent(false);
На начальном этапе сигнала установлен на ложной.
ThreadPool.QueueUserWorkItem(new WaitCallback(CodingInCSharp), autoEvent);
Выберите нить из ThreadPool и сделать эту нить для выполнения CodingInCSharp. Цель WaitCallback - выполнить метод после того, как Main() thread завершит выполнение.
autoEvent.WaitOne(1000,false)
Подождите 1 сек, чтобы получить сигнал от "CodingInCSharp") упаковывают, если я использую WaitOne (1000, правда), будет ли он убить нить, полученную от ThreadPool?
Если я не установил
((AutoResetEvent)stateInfo).Set();
, будет ли Main() бесконечно ждать сигнала?