using System;
using Oracle.ManagedDataAccess.Client;
namespace TestApplication
{
class Program
{
static void Main(string[] args)
{
Task.Run(() => Activity.Run());
}
}
public static class Activity
{
public static void Run()
{
const string sql = "SELECT * FROM MYTABLE WHERE ID = 103368 FOR UPDATE";
while (true)
{
try
{
using (var connection = new OracleConnection())
{
connection.ConnectionString = "xxx";
using (var command = connection.CreateCommand())
{
command.CommandText = sql;
connection.Open();
var reader = command.ExecuteReader();
if (reader.Read())
{
var x = reader[0];
}
}
}
}
catch (Exception)
{
//ERROR LOGGING HERE
}
}
}
}
}
问题是command.ExecuteReader()
必须等待很长时间(几分钟),因为数据库中的行已被某个其他进程锁定,整个线程就会死掉。如果它必须等待更少,例如一分钟就可以了。在它死亡的情况下,代码永远不会到达catch块。
我不想将异常处理移出任务。应该是连续工作的独立过程。在异常情况下,它应记录异常详细信息并继续处理数据库中的下一行。如果发生任何其他异常,catch块工作正常。