我有几个调用方法的线程。它看起来像这样:
public void DoWork(params int[] initialConditions)
{
//Do a lot of work
}
但是,如果条件变化很快,我会得到很多陈旧的中间结果,因为我无法足够快地完成计算。我知道!我将代码修改为如下所示:
public void DoWork(params int[] initialConditions)
{
if(Monitor.TryEnter(syncLock)
{
//Do a lot of work
Monitor.Exit(syncLock);
}
}
现在我不会费心去计算,除非我之前的计算完成了。在快速变化的情况下,我会有点落后,但不会超过我本来应该做的,而且我不会为了过时的结果而浪费我的时间做所有额外的工作。
然而,
一旦情况停止变化,我还是有点过时了,最后一个想调用 DoWork 的线程早已不复存在。有没有办法告诉线程:
if no one is doing work
do work
else
wait to do work until after the other thread finishes
but
if a new thread arrives before you start doing work, leave without doing work.