我有一個API請求隊列,我已使用System.Timers.Timer
循環。我把它像這樣:我的計時器循環間歇性地減慢,不知道爲什麼
private static void SetupTimerLoop()
{
queueLoopTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
queueLoopTimer.Interval = 100;
queueLoopTimer.Start();
}
定期OnTimedEvent
只會被稱爲每秒一次,幾乎一模一樣的時間跨度大。然後它會每100ms加速一次。我無法準確地重現這些結果,有時會發生,有時卻不會。我觀察過我的CPU使用情況,並且在這些放緩的時候,它並沒有飆升,如果有什麼降低的話。
如果我做斷點它表明定時器間隔仍然只有100ms。
這裏可能會發生什麼?有什麼我可以做的,以進一步解決這個問題?
潛在相關,當發生這種情況時,所有從循環中啓動的HTTP請求(這些放在任務中,以便它們異步返回)不再返回。相關
請求:
private T Get<T>(string endpoint, IRequest request) where T : class
{
var client = InitHttpClient();
string debug = BaseUrl + endpoint + ToQueryString(request);
HttpResponseMessage response = client.GetAsync(BaseUrl + endpoint + ToQueryString(request)).Result;
string body = response.Content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode)
{
T result = JsonConvert.DeserializeObject<T>(body, _serializerSettings);
return result;
}
var error = JsonConvert.DeserializeObject<HelpScoutError>(body);
throw new HelpScoutApiException(error, body);
}
我從來沒有:string body = response.Content.ReadAsStringAsync().Result;
只要循環似乎運行緩慢。
不知道如果這可能與它有關,希望你們有一些洞察力。
編輯:我不淹沒與請求的API。我扼殺了每60秒滾動一次的請求數量。在那段時間,我只是使用if語句來傳遞該循環的API調用。
嗨YooManFoo,它肯定是一個事件處理程序,以預設的時間間隔觸發。然而,我很困惑,爲什麼它有時不會在適當的時候觸發。感謝您的建議,我已經實施了。 –
您可能想在此處添加更多代碼段,以便我們可以嘗試一下,如果您仍然遇到問題。 – YooManFoo