我有一个计时器,我在一段时间内调用了一些函数。现在我有这样的事情:
private System.Timers.Timer timer;
private int sync;
void Start()
{
timer = new System.Timers.Timer(interval);
timer.Elapsed += new ElapsedEventHandler(Elapsed);
timer.Enabled = true;
}
void Elapsed(object s, ElapsedEventArgs e)
{
if (System.Threading.Interlocked.CompareExchange(ref sync, 1, 0) == 0)
{
Parallel.Invoke( () => Function1(), () => Function2(), () => Function3(),
() => Function4() );
}
sync = 0;
}
这还不错。我可以并行启动功能,并且一个功能不能运行 2 次以上,只能运行一次(这就是我想要的方式)。问题是:假设比function4()
my 需要更长的时间interval
,所以其他功能也必须等待。如果我删除sync
那里,其他函数不会等待但另一个function4()
调用可以在另一个线程中启动 - 我不希望一个函数运行两次。有什么建议么?谢谢