我对这两者协同工作有一个疑问,因为我不相信它们是齐头并进的。
我有一些使用后台工作者的代码,并在 DoWork() 中执行一些逻辑。此逻辑仅使用 TcpClient 对象并将数据发送到外部设备。
我的问题是在 DoWork() 中,我调用 AutoResetEvent.WaitOne()。这是否会停止当前线程,直到调用 AutoResetEvent.Set()?例如,如果 AutoResetEvent.Set() 从未被调用过,Background Worker 会简单地停止并且不执行任何操作吗?
不确定这是否本质上是糟糕的设计,但不幸的是支持它:(
编辑一些伪代码
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?
}
}