【发布时间】:2014-07-22 09:46:32
【问题描述】:
我在 Windows 服务中有多个计时器用于一些不同的东西:
timerForUpdate = new Timer();
timerForSyncByServer = new Timer();
timerForGetFactors = new Timer();
timerForDelete = new Timer();
timerForHandshaking = new Timer();
timerForConfig = new Timer();
timerForSyncByServer.Interval = 35000;
timerForUpdate.Interval = 40000;
timerForDelete.Interval = 30000;
timerForGetFactors.Interval = 200000;
timerForHandshaking.Interval = 60000;
timerForConfig.Interval = 10000;
如您所见,它们有不同的间隔,但有时操作时间太长,并且 2 个计时器同时工作,这很糟糕。
我尝试使用lock 块来处理问题:
public object CrossTimer = new object();
void timerForConfig_Elapsed(object sender, ElapsedEventArgs e)
{
lock (CrossTimer)
{
ConfigOperation.UpdateWebConfig();
}
}
void timerForHandshaking_Elapsed(object sender, ElapsedEventArgs e)
{
lock (CrossTimer)
{
HandshakeOperations.ShakeHand();
}
}
void timerForDelete_Elapsed(object sender, ElapsedEventArgs e)
{
lock (CrossTimer)
{
FoodTypesOperations.DeleteWebDB();
KalaToleedOperations.DeleteWebDB();
}
}
void timerForGetFactors_Elapsed(object sender, ElapsedEventArgs e)
{
lock (CrossTimer)
{
FactorOperations.GetLastFactors();
}
}
但是动作没有变化,并且多个计时器确实同时工作。 如果计时器正在工作,我想阻止其他计时器的操作。
【问题讨论】:
-
区间不同,但有时多个区间是相同的。例如。在
120000之后,Update、Delete和Handshake计时器将同时触发。那你想发生什么? -
@Damien_The_Unbeliever 完全正确,我想如果在工作中握手,删除等到工作结束
标签: c# multithreading timer windows-services