Задать вопрос
@Misuta

Как выполнение действия в определенное время?

Делаю телеграм бота напоминалку. Пользователь устанавливает дату события, бот напоминает пользователю о событие за несколько дней до него, и в день события. Дата события хранится в базе.
Как собственно сделать так, что бы программа совершала действие в определенное время? В голове только функция, которая каждую секунду сравнивает дату и время события с текущем временем, но это как-то слишком наивно) Как поступают в подобных ситуациях? Ставят таймеры? А что если этих событий много? А если я перезапущу сервер? А если событие произойдет только через полгода, таймер будет идти всё это время?
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
scoffs
@scoffs
Fullstack | C# | Student
Может что-то на основе обычного таймера.

В этом примере планировщик задач (таймер) запускается с периодом 1 час. В методе TimerElapsed вы можете подключиться к базе данных и выполнить запрос для получения событий, а затем проверить каждое событие и отправить напоминание пользователю, если текущее время ближе к определенным моментам.
using System;
using System.Timers;

public class EventReminder
{
    private Timer timer;

    public EventReminder()
    {
        timer = new Timer();
        timer.Elapsed += TimerElapsed;
        timer.Interval = TimeSpan.FromHours(1).TotalMilliseconds; // Период проверки (1 час)
        timer.AutoReset = true;
        timer.Start();
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        // Подключение к базе данных и выполнение запроса для получения событий
        // Проверка каждого события и отправка напоминания, если необходимо
    }
}

public class Program
{
    public static void Main()
    {
        // Создание экземпляра EventReminder
        EventReminder eventReminder = new EventReminder();

        // Ожидание завершения программы (например, с помощью Console.ReadLine())
        Console.ReadLine();
    }
}
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
Можно добавить в сервис BackgroundWorker который постоянно работает и отслеживает время наступления событий.
Чтобы он не молотил постоянно, при запуске взять время ближайшего события и усыпить thread/task до этого события.
Если возможно появление новых событий во время ожидания, то добавляется обьект синхронизации, который пробудит worker раньше и позволит ему обновить интервал ожидания.
Ответ написан
Комментировать
@TKDBOT
Учу python. Готов к конструктивной критике.
Возможно библиотека schedule тебе поможет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы