我试图在由以下方法调用的方法中打开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答案 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