Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle中的线程池连接_Oracle_C# 4.0_Threadpool - Fatal编程技术网

Oracle中的线程池连接

Oracle中的线程池连接,oracle,c#-4.0,threadpool,Oracle,C# 4.0,Threadpool,我试图在以下人员调用的方法中打开oracle连接: ThreadPool.QueueUserWorkItem(新建WaitCallback()) 但当另一个线程(假设线程2)在thread1中打开连接后立即启动时,该thread1将关闭,而不会通过抛出连接超时异常来实际执行我的任务 我不能用相同的连接字符串为每个线程打开单独的连接吗 static void LongRunningProcess(object threadId) { Int32 k = Thread.CurrentThrea

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

ThreadPool.QueueUserWorkItem(新建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调用的metod。QueueUserWorkItem

我猜您的p[]或con1[]数组在线程之间共享,可能已损坏。为了验证两个连接是否正常工作,请尝试以下代码

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

确保可以,这可能是您的代码有问题,即可能线程正在访问同一内存,一些代码将有助于识别问题Static void LongRunningProcess(object threadId){Int32 k=Thread.CurrentThread.GetHashCode();if(p[k].Equals(0)){p[k]=k;con1[k]=neworacleconnection(“数据源=TAPTI;用户id=PROV582;密码=PROV582”);Console.WriteLine(“新连接{0}”,k);con1[k].Open();//此处获取异常}provisionrequestvo valobj=new provisionrequestvo();valobj=(provisionrequestvo)q.Dequeue();try{//my logic}上面是ThreadPool.QueueUserWorkItem调用的方法,但我需要每个线程都有一个单独的连接来加速我的进程。上面的代码能满足我的目的吗?如果使用ThreadPool,请参阅此链接