C# OracleConnection请求超时

C# OracleConnection请求超时,c#,oracle,multithreading,odp.net,.net-core-3.1,C#,Oracle,Multithreading,Odp.net,.net Core 3.1,在.Net Core 3.1多线程控制台应用程序中出现问题OracleConnection将始终引发“连接请求超时”异常。“任务”是对Oracle中存储的进程的调用,该进程通过游标返回数据。在一个线程中,所有工作正常,没有问题 这是在.Net Core 3.1中使用的最新nuget版本的Oracle.ManagedDataAccess.Client 在Oracle连接字符串、池大小、连接生存期连接超时等方面尝试了多种设置组合。似乎没有任何帮助。一旦排队的任务数超过线程数,连接上的打开调用将抛出异

在.Net Core 3.1多线程控制台应用程序中出现问题<如果对ThreadPool.QueueUserWorkItem的调用数超过ThreadPool.SetMaxThreads中设置的线程数,则strong>OracleConnection将始终引发“连接请求超时”异常。“任务”是对Oracle中存储的进程的调用,该进程通过游标返回数据。在一个线程中,所有工作正常,没有问题

这是在.Net Core 3.1中使用的最新nuget版本的Oracle.ManagedDataAccess.Client

在Oracle连接字符串、池大小、连接生存期连接超时等方面尝试了多种设置组合。似乎没有任何帮助。一旦排队的任务数超过线程数,连接上的打开调用将抛出异常

使用OracleConfiguration进行跟踪会发现异常:

2020-09-23 21:30:51.997780 TID:6   (PRI) (ERR) (CP) PoolManager.CreateNewPR() (txnid=n/a) Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Connection request timed out
   at OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd, OracleConnection connRefForCriteria, String instanceName, List`1 switchFailedInstNames)
某些线程处于以下状态“搜索空闲连接”:

要复制的代码:

使用Oracle.ManagedDataAccess.Client;
使用Oracle.ManagedDataAccess.Types;
使用制度;
使用系统数据;
使用系统诊断;
使用系统线程;
名称空间OracleDBStoredProc
{
班级计划
{
私有静态对象lockObj=新对象();
静态void Main(字符串[]参数)
{
int numThreads=10;
SetMaxThreads(numThreads,numThreads);
对于(int i=0;i
什么是nThreads vs numThreads?如果只做这个
Task.Run(()=>DoSomething())任务.Run显示出相同的行为。OracleConnection“连接请求超时”。相信这与ODP和在线程中运行有关。但是ODP确实说这是线程安全提示,如果你想让你的消息到达收件人——包括@BrianOnce这个名字,因为我和MySqlClient有问题。我使用dotPeek来分解它,我发现了这个bug并创建了一个包装器类来解决这个问题。你需要看看里面是什么引起的,
2020-09-23 21:28:57.443815 TID:13  (PRI) (ENT) (CP) PoolManager.Get() MultiTenant : Searching for a idle connection, retryCountWithoutAffinity: 0