我的程序中有两个 CRITERIA 决定线程应该等待还是继续。
第一个标准: XML 文件中的更改。我有一个文件观察器,如果 XML 文件发生更改,它会设置一个AutoResetEvent
(_waitTillXmlChanges.Set()
),因此线程应该继续。
第二个标准:到期日已到。如果今天是应该进行文件传输的日期,那么第二个标准已经满足,因此线程应该继续。
我当前的代码:
var waitTillNextWakeUpDay = NextWakeUpDay - DateTime.Now;
//SPURIOS WAKE-UP calls happening here
_waitTillXmlChanges.WaitOne(waitTillNextWakeUpDay);
我知道,为了避免虚假的唤醒调用,将 awhile-loop
放在 a 周围,WaitOne()
以便线程在错误唤醒时再次进入等待模式。
问题:我不明白我应该如何实现故障安全while循环WaitOne()
(这取决于两个条件)。
重要线索:因为每当 XML 文件发生更改时我都会在日志文件上打印,所以我可以说虚假的唤醒呼叫不是因为 FileWatcher。最有可能的是,问题出在 line 上_waitTillXmlChanges.WaitOne(waitTillNextWakeUpDay)
,它无法等待waitTillNextWakeUpDay
(大约 1 天)的时间跨度,并且每 15-30 分钟就会醒来。
上面的代码在我的 PC 上可以正常工作,但在另一台 PC 上出现了虚假唤醒的问题。