ドキュメントをアップロードしようとする試みが Try/Catch ブロック内にラップされるメソッドをコーディングしています。
試行が失敗した場合は、再試行カウンターをインクリメントし、同じメソッドを再帰的に呼び出します。
「Catch」ブロックがヒットした場合の実行パスは明確ではありません。最初のテストでは、最初の再帰呼び出しが実行された後に「return null」ステートメントが実行されることが示されています。おそらく、「return null」ステートメントは Catch ブロック内にある必要がありますが、retries<3 ループの外にある必要がありますか?
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;
}