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()

Другие вопросы по тегам