我正在編寫一個嘗試上載文檔的方法被封裝在Try/Catch塊中的方法。來自Catch塊的Recusive調用
如果嘗試失敗,我遞增Retry計數器並遞歸調用相同的方法。
在'Catch'塊被擊中的情況下,我不清楚執行路徑。初始測試顯示在執行第一次遞歸調用之後執行'return null'語句。也許'返回null'語句需要在Catch塊內但在重試之外的循環中?
public RssUploadDocOutput UploadInvoice(string filename, int retries)
{
var returnsOutput = new RssUploadDocOutput();
GoogleSheetsCommand sscmd = new GoogleSheetsCommand("UploadDocument", ConnSheets);
sscmd.CommandType = System.Data.CommandType.StoredProcedure;
sscmd.Parameters.Add(new GoogleSheetsParameter("LocalFile", filename));
//int retries = 0; removed
try
{
GoogleSheetsDataReader rdr = sscmd.ExecuteReader();
rdr.Read();
returnsOutput.ID = rdr[0].ToString();
[...]
returnsOutput.Weblink = rdr[6].ToString();
return returnsOutput;
}
catch (Exception ex)
{
//retries++;
Logger.Instance.LogException(ex);
if (retries < 3)
{
Thread.Sleep(1000 * retries);
UploadInvoice(filename, retries+1);
}
}
return null;
}
您的外部的可變的重試每次通話都會重置「重試」計數器,可能會提供額外的參數? – 2012-07-24 14:27:50
變量重試是在方法內部聲明的('int retries = 0;')。試着改變這一點。 – shajivk 2012-07-24 14:28:11
'retries'變量在方法中聲明。它不會> = 3. – ken2k 2012-07-24 14:28:23