【发布时间】:2019-09-13 19:35:10
【问题描述】:
我正在尝试使用以下代码测试我与 Sql Server 数据库的连接。它所做的只是尝试在后台任务中打开连接,超时 5 秒:
private bool CanConnect()
{
//we'll give it 5 seconds to connect
var timeout = TimeSpan.FromSeconds(5);
var connectSuccess = Task.Run(() =>
{
try
{
//the connection
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
}
}
catch { }
}).Wait(timeout);
//return status
return connectSuccess;
}
但是当我这样做时,我很快就会得到错误
System.InvalidOperationException: '超时已过期。超时 从池中获取连接之前经过的时间。这 可能已经发生,因为所有池连接都在使用中并且最大 已达到池大小。'
这总是在第 4 次连接尝试时发生,这令人费解,因为默认池大小为 100。
但我完全不明白为什么会发生这种情况,因为我正在处理与 using 块的连接。那么为什么我没有可用的连接,而且这么快呢?
【问题讨论】:
-
你能给我们你的连接字符串(ofc 没有显示凭据)
-
您提供的代码并不能证明:1)它发生在第四次连接上; 2)池中最大连接的默认值不是由连接字符串重新定义的,3)在请求另一个连接之前,连接被返回到池中。
标签: c# multithreading ado.net sqlconnection