我正在使用令人沮喪的API,它具有改變其限制速率的煩人習慣。有時我可以每秒發送一個請求,有時候我只能每三到四秒發送一個請求。在我無法控制數據源的情況下吞下異常
考慮到這一點,我需要創建一種方法來管理這一點。每當請求失敗時,它將返回503響應(服務不可用)。我目前的計劃是使用我的WebResponse
的HttpStatusCode
來確定我是否應該吞下當前的WebException
。我可以重複這個x次,直到請求成功,或者進程完全取消。
請注意,我無法停止並重新啓動進程,因爲這對用戶來說既耗時又損壞數據的結構。
目前,我已經結束了API調用和XML負載到它自己的方法:
int webexceptionnumber = 200;
public bool webResponseSuccessful(string uri, XmlDocument doc)
{
try
{
WebRequest request = HttpWebRequest.Create(uri);
WebResponse response = request.GetResponse();
doc.Load(response.GetResponseStream());
return true;
}
catch(WebException l)
{
if (((HttpWebResponse)l.Response).StatusCode == HttpStatusCode.ServiceUnavailable)
{
webexceptionnumber = 503; // I need to do this in a much neater
return false; //fashion, but this is quick and dirty for now
}
else
{
return false;
}
}
}
然後我就可以調用該方法,檢查是否就返回一個錯誤值,像這樣:
if (!webResponseSuccessful(signedUri, xDoc))
{
//Here is where I'm struggling - see below
}
對於如何幹淨地做到這一點,我很難過。我想避免使用goto
語句變得更加混亂,那麼當503響應返回時如何重複該操作?是while
循環的答案,還是我真的需要刪除額外的整數,並以更清潔的方式做到這一點?
看看這個https://stackoverflow.com/questions/1563191/cleanest-way-to-write-retry-logic。有很多很好的答案,因此請查看並選擇最適合您特定場景的答案。 – Nkosi
這是金色的,我希望我早點知道波莉!謝謝一堆 –