AutoResetEvent + Background Worker соединяются друг с другом
У меня есть вопрос относительно того, как эти двое работают вместе, так как я не уверен, что они идут рука об руку.
У меня есть некоторый код, который использует фоновый рабочий и в DoWork() он выполняет некоторую логику. Эта логика просто использует объект TcpClient и отправляет данные на внешнее устройство.
Мой вопрос в DoWork(), я вызываю AutoResetEvent.WaitOne(). Останавливает ли это текущий поток, пока не будет вызван AutoResetEvent.Set()? Например, если никогда не вызывать AutoResetEvent.Set(), будет ли фоновый рабочий просто останавливаться и не выполнять никаких операций?
Не уверен, что это плохой дизайн от природы, но, к сожалению, его поддерживаю:(
РЕДАКТИРОВАТЬ некоторый псевдокод
bool done = false;
while (!done)
{
//some logic here
done = System.DateTime.Now.Hour == 10;
if (!done)
{
AutoResetEvent.WaitOne();
//Question will the while loop fire again or does it wait for the Set() to be called
//before continuing?
}
}
1 ответ
в
DoWork()
Я звонюAutoResetEvent.WaitOne()
, Останавливает ли это текущий поток доAutoResetEvent.Set()
называется? Если, например,AutoResetEvent.Set()
никогда не называетсяBackground Worker
просто остановить и не выполнять никаких операций?
Ответ на это да, как указано в MSDN WaitHandle.WaitOne Method
будут:
Блокирует текущий поток, пока текущий WaitHandle не получит сигнал.
РЕДАКТИРОВАТЬ: для вашего добавленного кода цикл while будет ждать Set()