Как получить уведомление об изменении системной даты в ядре .NET на Linux? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь получить событие уведомления в .NET core / Standard (так как мне нужно сделать план будущих действий).Я портирую часть существующего кода .NET4.5x на .NET core 2.2 или .NETStandard2.

Первоначально я использовал:

SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler

Но в .NETCore или .NETStandard, это не реализовано .

Какой самый элегантный способ преодолеть это?

1 Ответ

0 голосов
/ 27 мая 2019

ОК, наконец-то я так и сделал (псевдокод):

public TimeSpan CheckInterval { get; private set; } = TimeSpan.FromMinutes(1);
public TimeSpan MaxAllowedDeviation { get; private set; } = TimeSpan.FromSeconds(1);

private async Task CheckTimeUpdate()
{
    while (cancelToken.IsCancellationRequested == false)
    {
        DateTimeOffset beforeTimer = DateTimeOffset.Now;

        await Task.Delay(CheckInterval, cancelToken);

        DateTimeOffset afterTimer = DateTimeOffset.Now;

        if ((afterTimer.UtcDateTime - beforeTimer.UtcDateTime).Duration() > MaxAllowedDeviation + CheckInterval)
        {
            //raises the event
            TimeChanged?.Invoke();
        }
    }
}

Но это работает только для ручного изменения времени, а не для перехода на летнее время или обновления часового пояса !!

...