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?
}
}
在CCD_ 1内,我调用CCD_。这是否会在调用
AutoResetEvent.Set()
之前停止当前线程?例如,如果从未调用AutoResetEvent.Set()
,Background Worker
是否会简单地停止并不执行任何操作?
答案是肯定的,正如MSDN WaitHandle.WaitOne Method
所引用的:
阻塞当前线程,直到当前WaitHandle接收到信号为止。
EDIT:对于添加的代码,while循环将等待Set()