如果OdbcConnection.Open()花费的时间太长,可以通过以下几种方式来取消它:
OdbcConnection conn = new OdbcConnection(connectionString);
conn.ConnectionTimeout = 5;
conn.Open();
这样,在连接尝试超过5秒后,会自动取消连接。
using System.Threading;
using System.Threading.Tasks;
public static async Task<bool> OpenConnectionAsync(OdbcConnection conn, int timeoutSeconds)
{
CancellationTokenSource cts = new CancellationTokenSource();
cts.CancelAfter(timeoutSeconds * 1000);
try
{
await conn.OpenAsync(cts.Token);
return true;
}
catch (OperationCanceledException)
{
return false;
}
}
使用时可以调用OpenConnectionAsync方法,并设置超时时间:
OdbcConnection conn = new OdbcConnection(connectionString);
bool success = await OpenConnectionAsync(conn, 5);
如果连接在5秒内没有打开,则会返回false。
using System.Threading;
public static bool OpenConnectionWithTimeout(OdbcConnection conn, int timeoutSeconds)
{
bool success = false;
Thread thread = new Thread(() =>
{
try
{
conn.Open();
success = true;
}
catch { }
});
thread.Start();
thread.Join(timeoutSeconds * 1000);
if (thread.IsAlive)
{
thread.Abort();
}
return success;
}
使用时可以调用OpenConnectionWithTimeout方法,并设置超时时间:
OdbcConnection conn = new OdbcConnection(connectionString);
bool success = OpenConnectionWithTimeout(conn, 5);
如果连接在5秒内没有打开,则会返回false。
这些方法可以根据实际情况选择适合的方式来取消OdbcConnection.Open()的执行,以避免长时间的等待。
领取专属 10元无门槛券
手把手带您无忧上云