2014-10-02 51 views
0

我想用兩個線程,讓我們給他們打電話預取客戶,在預取工作是讀取輸入流提前客戶線程,放入一些隊列。 客戶端然後從隊列中檢索數據以...... erm處理它。如何在不同的線程上重新引發異常?

現在如果預取遇到異常,我需要把現行異常到隊列,所以客戶發生異常時到達隊列中的那個點。

的問題是,我會掛到預取線程的(IO)異常,但我需要扔在客戶線程一個適當的異常。

我的第一個雖然只是抓住它,重新拋出它在另一個線程上。但是......這清楚地顯示了異常的堆棧跟蹤?

所以我應該簡單地把它包裝成一個新的異常?那意味着「原因」來自另一個線索,是否會造成麻煩?或者我必須完全拋棄原始異常;如果有某種可能,我想盡可能多地保留客戶端拋出的異常信息。

什麼樣的成語可用(和有效)來處理這種情況?

+0

不,拋出不會對異常的堆棧跟蹤執行任何操作。創建實例時會填充堆棧跟蹤。 – 2014-10-02 15:13:49

+1

只是將它包裝在一個新的例外中,作爲原因。所以休息很明顯。 – 2014-10-02 15:17:14

+0

這種模式發生很多,例如解析Web服務中的請求。通常,低級(IOException絕對有資格)錯誤處理應該在比業務邏輯更低的級別上進行。如果您不能在預取程序中執行此操作,則可能需要考慮在預取程序和客戶端之間添加專用的錯誤處理層,以便將錯誤處理與業務邏輯分離。 – Floegipoky 2014-10-02 15:30:54

回答

0

爲了調試目的,最好將原始異常包裝到新的異常中

相關問題