我有一个Windows服务,它按给定的时间间隔轮询Oracle数据库,并根据某些条件更新几个字段。为此,它打开一个光标,并循环访问要更新的行。
protected override void OnStart(string[] args)
{
TimerCallback timerDelegate = new TimerCallback(DoStuff);
serviceTimer = new Timer(timerDelegate, null, 0, 20000);
}
private void DoStuff(object state)
{
// Set-up connectionsString and sqlQuery
using (OracleConnection oraConnect = new OracleConnection(connectionString))
{
oraConnect.Open();
using (OracleCommand oraCommand = new OracleCommand(sqlQuery, oraConnect))
using (OracleDataReader oraReader = oraCommand.ExecuteReader())
{
while (oraReader.Read())
{
// Do some processing here â may take some time
// Update database here
}
}
}
我的问题是,比如说,计时器的间隔是20秒(如上所述)。如果光标需要30秒来迭代会发生什么?我知道每个计时器将在一个单独的线程中工作,但是考虑到每次都建立一个新的数据库连接,第二个调用会看到第一个调用所做的更改吗?