По истечении таймера я вызываю асинхронный метод c каждые 1,5 секунды.
В файле журнала я вижу разницу во времени в 300 мс между запуском TimerElapsed и методом SendMessage.
т.е. между «OnTimerElapsed: запущен» и «SendMessage: запущен».
Хотя это редко случается после того, как службы windows работают целый день.
private async void OnTimerElapsed(object source, ElapsedEventArgs e)
{
SourceTrace.TraceVerbose("OnTimerElapsed : started");
await SendMessage();
SourceTrace.TraceVerbose("OnTimerElapsed : completed");
}
public async Task SendMessage()
{
SourceTrace.TraceVerbose("SendMessage: started");
var sendTask = Send(); // start sending
var getTask = GetData(); // update data
await Task.WhenAll(sendTask, getTask);
}
Как я могу избавиться от такой необычно высокой задержки в 300-600 мс, возникающей редко и случайно?
- Я также попытался запустить службу windows как процесс с высоким приоритетом.
- . Net версия платформы - 4.7.1
Обновление : SourceTrace.TraceVerbose является оболочкой для System.Diagnostics TraceSource и TextWriterTraceListener. Обычно на запись журнала уходит 1-2 мс.