我已经为我需要做的项目创建了一个TelNet服务器工作正常,但是当客户端连接到服务器时需要连接到数据库,当连接信息正确和/或调用数据库的时间不会太长。
如果数据库调用需要很长时间(通常是因为凭据不正确或存储过程严重优化),服务器将崩溃并出现Windows错误消息(即无法调试),我理解这是底层的TCP系统,这很好。为了解决这个问题,我将所有数据库调用放入BackgroundWorkers
,因此服务器(和客户端)继续工作,但是如果显然需要太长时间,我需要终止这个过程。
我知道使用BackgroundWorker.CancellationPending
,但由于这是对数据库的单个方法调用(通过和外部DLL),因此永远不会检查它。与我在其他地方看到的自制方法相同的问题。我看到的另一个选项是使用Thread.Abort()
,但我也知道这是不可预测和不安全的,所以最好不要使用它。
有人有任何建议如何实现这个目标吗?
答案 0 :(得分:1)
这里的问题是外部DLL正在控制等待。通常,您可以取消ADO.NET连接或套接字连接,但这不起作用。
两种可靠的方法: