AutoResetEvent+后台工作程序相互结合

本文关键字:结合 工作程序 后台 AutoResetEvent+ | 更新日期: 2023-09-27 18:20:54

我有一个关于这两者协同工作的问题,因为我不相信它们是齐头并进的。

我有一些代码使用后台工作程序,在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?
  }
}

AutoResetEvent+后台工作程序相互结合

在CCD_ 1内,我调用CCD_。这是否会在调用AutoResetEvent.Set()之前停止当前线程?例如,如果从未调用AutoResetEvent.Set()Background Worker是否会简单地停止并不执行任何操作?

答案是肯定的,正如MSDN WaitHandle.WaitOne Method所引用的:

阻塞当前线程,直到当前WaitHandle接收到信号为止。

EDIT:对于添加的代码,while循环将等待Set()