如果花费的时间太长,我该如何取消 OdbcConnection.Open()?
How can I cancel OdbcConnection.Open() in case it takes too long?
我们的产品之一是允许用户创建和保存项目的应用程序,在这些项目中,可以连接到数据库。
在我们的代码库中,我们使用 ODBC 并使用以下方式打开连接:
conn.Open()
其中 conn 是 OdbcConnection object
.
如果连接失败,则需要 15 秒。这样做的结果是,如果我们尝试在打开后的 15 秒内关闭具有无效连接的项目,则需要 15 秒才能关闭。这听起来不多,但可能很烦人。
那么如何取消 conn.Open
调用呢?我现在唯一能想到的就是把它放在一个单独的线程上,然后 Abort
线程,但这听起来不像我想做的事情。有没有更可控的方式来做到这一点?
您可以减少连接超时,例如使用 5 秒:
var connection = new OdbcConnection(Program.Settings.ConnectionString);
connection.ConnectionTimeout = 5;
connection.Open();
如果您不想减少它,则无法停止打开的请求,据我所知:
您可以尝试在线程中打开并在特殊超时后或根据用户请求(例如使用按钮)中止它。
Button Click to stop a test
但是不知道会不会保证线程瞬间停止,会不会因为底层系统的原因抛出什么异常。您应该尝试使用线程、任务、后台工作者或其他任何东西。
我们的产品之一是允许用户创建和保存项目的应用程序,在这些项目中,可以连接到数据库。
在我们的代码库中,我们使用 ODBC 并使用以下方式打开连接:
conn.Open()
其中 conn 是 OdbcConnection object
.
如果连接失败,则需要 15 秒。这样做的结果是,如果我们尝试在打开后的 15 秒内关闭具有无效连接的项目,则需要 15 秒才能关闭。这听起来不多,但可能很烦人。
那么如何取消 conn.Open
调用呢?我现在唯一能想到的就是把它放在一个单独的线程上,然后 Abort
线程,但这听起来不像我想做的事情。有没有更可控的方式来做到这一点?
您可以减少连接超时,例如使用 5 秒:
var connection = new OdbcConnection(Program.Settings.ConnectionString);
connection.ConnectionTimeout = 5;
connection.Open();
如果您不想减少它,则无法停止打开的请求,据我所知:
您可以尝试在线程中打开并在特殊超时后或根据用户请求(例如使用按钮)中止它。
Button Click to stop a test
但是不知道会不会保证线程瞬间停止,会不会因为底层系统的原因抛出什么异常。您应该尝试使用线程、任务、后台工作者或其他任何东西。