[英]Cancel background worker which is calling external process
我已經為需要執行的項目創建了一個TelNet服務器,該服務器工作正常,但是,當客戶端連接到服務器時,它需要連接到數據庫,當連接信息正確和/或調用數據庫時,同樣可以正常工作數據庫不會花費太長時間。
如果數據庫調用花費很長時間(通常是由於憑據不正確或存儲過程優化不佳),則服務器將崩潰並顯示Windows錯誤消息(即不可調試),我知道這是底層TCP系統的介入,這很好。 為了解決這個問題,我將所有數據庫調用都放到BackgroundWorkers
,以便服務器(和客戶端)繼續工作,但是如果此過程顯然花費太長時間,則需要終止該過程。
我知道使用BackgroundWorker.CancellationPending
,但是由於這是對數據庫的單個方法調用(通過和外部DLL),因此永遠不會進行檢查。 我在其他地方看到過的自制方法也存在同樣的問題。 我看到的另一個選項是使用Thread.Abort()
,但我也知道這是不可預測的且不安全的,因此最好不要使用它。
有人對如何做到這一點有任何建議嗎?
這里的問題是外部DLL控制着等待。 通常,您可以取消ADO.NET連接或套接字連接,但這在這里不起作用。
兩種可靠的方法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.