我有一些代碼,看起來像這樣:如果catch塊包含continue語句,何時執行finally塊?
foreach(var obj in collection)
{
try
{
// WriteToFile returns the name of the written file
string filename = WriteToFile(obj);
SendFileToExternalAPI(filename);
}
catch (ArbitraryType1Exception e)
{
LogError(e);
continue;
}
...
catch (ArbitaryTypeNException e)
{
LogError(e);
continue;
}
finally
{
try
{
File.Delete(filename);
}
catch (Exception e)
{
LogError(e);
}
}
}
的目標是嘗試寫出一個臨時文件的集合中的每個對象,試圖加載該文件到其想要的文件名外部API,並然後在完成後清理臨時文件。如果將文件寫入磁盤或將其加載到外部API時發生錯誤,我只想記錄錯誤並轉到下一個對象;我不能要求用戶做什麼。
當catch處理程序中有繼續語句時,我對finally塊的時序如何工作有點不確定。無論是否在try塊中拋出異常,這段代碼是否會(試圖)刪除正確的文件?或者,在finally語句塊運行之前catch語句中的continue是否會生效?
我已經接受這個解決方案,因爲它包含*關於continue語句執行finally代碼塊時*的最清晰描述。 – Hydrargyrum