2014-02-28 118 views
0

我們有一個打開文件的功能(文件是自定義的.oxr文件)。問題在於,有時文件被損壞,程序停止,不能繼續運行,從而導致整個程序受到影響。使用線程來暫停一個函數是不是很好的做法?

我想開發一種方法,將超過某些秒鐘後的功能。我已經使用線程來實現這一點。這裏的概念: - 我通過使用'thread.join'方法調用函數作爲一個線程,等待一定的時間線程函數執行。超時後,我只是中止線程。所以,調用返回到線程被調用點之後的代碼。它按預期工作!

這個概念很好的做法嗎?

+0

不,這不是一個好習慣。在你自己的過程中放棄一個線程是不好的。如果您無法修復您的功能,請在單獨的子進程中運行此不穩定的操作,然後取消它。 – Noseratio

+0

以下是如何做到這一點的權利:http://stackoverflow.com/questions/13513650/how-to-set-timeout-for-a-line-of-c-sharp-code – Carsten

+0

@Aschratt,合作取消不是選項在這裏,除非OP可以修復他的功能來處理損壞的數據(他應該首先完成的)。 – Noseratio

回答

1

您有多個問題,這個概念:

  1. 這是很難用異步代碼來實現,因爲線程可能在執行過程中發生變化,例如:該方法使得web請求(線程1)並且回調可以由另一個線程執行(取決於您的同步上下文)。

  2. 線程很貴。創建或停止一個線程需要花費很多時間,每個線程消耗大約4 MB的afaik。

  3. 當您中止線程時,會將對象置於未定義狀態,因此無法預測在對它們調用方法時發生了什麼。

  4. 您不能停止線程異常中止的異步操作。

在我opionion它是好的,如果你沒有其他選擇,我想,像IIS系統也有一定的中止,mechanismus以提高穩定性做到這一點,但你應該嘗試這樣做。

相關問題