Task.Run中的异常处理

时间:2017-01-12 13:34:52

标签: c# .net multithreading exception-handling task

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块工作正常。

  1. 这可能是数据库命令超时问题吗?
  2. 问题是什么不能到达捕获区?

0 个答案:

没有答案