您必須將循環構造內的try/catch塊。如果你不想佔用你的處理器的100%在catch塊中放置一個Thread.Sleep,所以每當發生異常時,它都會等待一段時間,釋放處理器去做其他事情。
// iterate 100 times... not forever!
for (int i = 0; i < 100; i++)
{
try {
// do your work here;
break; // break the loop if everything is fine
} catch {
Thread.Sleep(1000);
}
}
您還可以指定異常類型,以便只處理超時異常,以及其他類型的異常傳遞。
// iterate 100 times... not forever!
for (int i = 0; i < 100; i++)
{
try {
// do your work here;
break; // break the loop if everything is fine
} catch (TimeOutException) {
Thread.Sleep(1000);
}
}
請注意,TimeOutException應該被替換爲異常的真實名稱......我不知道這是否是真實的名稱。
此外,在我提交的情況下,還要調整睡眠時間(毫秒數和重複次數),重複100次1000毫秒,最多等待1分40秒,再加上操作時間本身。
增加超時所以它不會拋出異常? – ChaosPandion
您可以簡單地從catch塊中調用該方法,*但是* - 如果服務長時間停機會發生什麼情況?你想讓這個方法遞歸運行24小時嗎?我建議將它限制爲一組重試次數。 – Tim
在所有這些答案中,沒有一個人告訴你要捕捉更具體的例外情況。如果你的try塊包含處於無效狀態的對象來獲得'salesOrderList'?重試永遠不會成功。 – Marc