我想要的是一种Windows服务,该服务以一定间隔执行功能,而无需打开多个线程。
我使用Threading.Timer做的事情,创建了以下代码:
protected override void OnStart(string[] args) {
System.Threading.Timer timer1 = new System.Threading.Timer(new TimerCallback(Risk), null, 60000, Timeout.Infinite);
}
public void Risk(object state) {
try{
//long operation
}
catch(ex){
}
finally{
timer1.Change(1000, Timeout.Infinite);
}
}
我的问题,看来这段代码正在打开多个线程。这可能吗?我哪里做错了?这是获得我想要的东西的好方法吗?
更新(使用System.Timers.Timer):
protected override void OnStart(string[] args) {
System.Timers.Timer aTimer;
aTimer = new System.Timers.Timer(60000);
aTimer.Elapsed += Risk;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private void Risk(Object source, ElapsedEventArgs e) {
aTimer.Enabled = false;
try{}
catch(ex){}
finally{
aTimer.Interval = 1000;
aTimer.Enabled = true;
}
}
答案 0 :(得分:1)
多个计时器刻度可以同时运行。计时器类不等待刻度完成。 (我认为它应该具有这样的功能,因为它几乎总是您想要的。)
一个简单的解决方法是使用Task.Delay
运行循环:
while (!cancel) {
DoStuff();
await Task.Delay(...);
}
然后您以Task.Run(() => { AsyncCodeHere(); });
开始。