繁体   English   中英

如果需要太长时间,如何取消 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();

如果您不想减少这种情况,则无法停止打开请求,据我所知:

https://referencesource.microsoft.com/#System.Data/fx/src/data/System/Data/Odbc/OdbcConnection.cs,415c9a2f8c368e8f

https://github.com/mono/mono/blob/master/mcs/class/referencesource/System.Data/System/Data/Odbc/OdbcConnection.cs

您可以尝试在线程中打开并在特殊超时后或根据用户请求使用按钮中止它。

c# 单击按钮停止线程

按钮 单击以停止测试

但是我不知道它是否会保证线程会立即停止,以及由于底层系统可能会引发什么异常。 您应该尝试使用线程、任务、后台工作者或其他任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM