У меня есть очередь запросов API, которую я зациклил, используя System.Timers.Timer
. Я поставил его так:Мой таймер петли прерывается, не уверен, почему
private static void SetupTimerLoop()
{
queueLoopTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
queueLoopTimer.Interval = 100;
queueLoopTimer.Start();
}
Периодически OnTimedEvent
только дозвонились один раз в секунду, почти точно для больших промежутков времени. Затем он будет восстанавливаться до одного раза каждые 100 мс. Я не могу точно воспроизвести эти результаты, иногда это происходит, иногда это не так. Я наблюдал за использованием моего процессора, и он не всплескивался в течение этих периодов замедления, если что-то сходит с ума.
Если я делаю контрольные точки, это показывает, что интервал таймеров по-прежнему равен только 100 мс.
Что может быть здесь? Есть ли что-нибудь, что я могу сделать для дальнейшего устранения этой проблемы?
Потенциально связанный, когда это происходит со всеми моими 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 для этого цикла.
Hi YooManFoo, это определенно обработчик событий, который запускается с заданным интервалом. Тем не менее, я очень смущен, почему он иногда не срабатывает в соответствующее время. Спасибо за ваше предложение, я это сделал. –
Возможно, вы захотите добавить здесь фрагмент кода, чтобы мы могли попробовать, если у вас все еще есть проблемы. – YooManFoo