Oracle中的Threadpool连接

时间:2014-04-17 11:00:00

标签: oracle c#-4.0 threadpool

我试图在由以下方法调用的方法中打开oracle连接:

ThreadPool.QueueUserWorkItem(new WaitCallback())

但是当另一个线程(假设线程2)在thread1中打开连接之后启动时,这个thread1正在关闭而没有通过抛出连接超时异常来实际执行我的任务。

我是否可以使用相同的连接字符串打开每个线程的单个连接?

static void LongRunningProcess(object threadId) 
{
  Int32 k = Thread.CurrentThread.GetHashCode(); 

  if (p[k].Equals(0)) 
  {
       p[k] = k; 
       con1[k] = new OracleConnection("data source=TAPTI; user id=PROV582; password=PROV582"); 
       Console.WriteLine("New Connection {0} ", k); 
       con1[k].Open();

        //getting exception here 
  } 

  ProvsionRequestVO valobj = new ProvsionRequestVO(); 
  valobj = ProvsionRequestVO)q.Dequeue(); 
  try { 
       // my logic 
  } 

以上是ThreadPool.QueueUserWorkItem

调用的metod

1 个答案:

答案 0 :(得分:0)

我的猜测是你的p []或con1 []数组在线程之间共享并且可能已被破坏。只是为了验证2个连接是否有效,请尝试使用此代码

static void LongRunningProcess(object threadId) 
{
    OracleConnection con = new OracleConnection("data source=TAPTI; user id=PROV582; password=PROV582"); 
    Console.WriteLine("New Connection {0} ", Thread.CurrentThread.GetHashCode()); 
    con.Open();

    ProvsionRequestVO valobj = new ProvsionRequestVO(); 
    valobj = ProvsionRequestVO)q.Dequeue(); 

    try { 
        // my logic using con instead
    }
}

确保关闭并在此方法结束时处置con