Как создать функцию запуска по времени? - PullRequest
1 голос
/ 21 марта 2019

В поисках какой-либо функции автоматического запуска, которая запускается в указанное время.

например.У пользователя есть конференция, которая должна начаться 25/04/2019 05:30 Здесь пользователь должен получить уведомление от 25/04/2019 05:25 |05:29 Конференция вот-вот начнется.

Создана функция лазури (время срабатывания), которая срабатывает каждую минуту и ​​проверяет, является ли текущее время временем конференции - 4 минуты, затем отправляет уведомление о начале конференции.

В будущем будет иметься несколько пользователей, и поэтому я не хочу, чтобы функция выполнялась каждую минуту. Есть ли способ, которым функция в 05:25 или во время конференции будет выполняться сама.Таким образом, может быть 100 пользователей, и они будут разными.Просто ищите варианты о том, как реализовать лучше.

.net основной сайт, размещенный на Azure. Каждую минуту выполняются функции azure для проверки остатка

Ответы [ 3 ]

4 голосов
/ 22 марта 2019

Когда пользователь зарегистрирован в конференции, вы можете поставить в очередь сообщение (с данными пользователя) в очередь с задержкой видимости :

queue.AddMessage(message, initialVisibilityDelay: TimeSpanDelay);

Например, пользователь зарегистрирован в 18:00, и конференция будетбыть на следующий день в 8 вечера, поэтому время задержки будет 25 часов и 55 минут (предполагается, что пользователь хочет получить уведомление за 5 минут до конференции).Тогда вместо функции запуска по времени вы будете использовать функцию запуска по очереди, которая будет отправлять уведомления, когда сообщения из очереди станут видимыми:

public static void Run([QueueTrigger("notifications")]QueueTrigger message, TraceWriter log)
{
    Notifier.Send(message.UserName, message.UserPhoneNumber, message.Email);
}

Более того, если по какой-то причине ваш обработчик уведомлений будет неуспешным, сообщения очереди будутне потеряйтесь, так что вы можете попытаться обработать их несколько раз.

0 голосов
/ 22 марта 2019

Из вашего описания у вас уже есть функция TimerTrigger, однако ваш таймер устанавливает функцию, работающую каждые минуты. На самом деле вы можете установить более точный таймер с выражениями CRON.

Это выражения CRON в функции Azure, оно включает шесть полей: {second} {minute} {hour} {day} {month} {day-of-week}. Таким образом, вы можете установить свою функцию 0 25,29 5 22 March *.

И после того, как вы развернете функцию в Azure, она продолжит работу, однако не будет выполнять метод Run, пока не сработает таймер.

public static void Run(TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}

enter image description here

enter image description here

0 голосов
/ 21 марта 2019

Я рекомендую вам написать службу Windows, используя библиотеку кварца, чтобы запланировать работу.Вы можете забрать время графика работы из БД или где-то.

См .: https://www.quartz -scheduler.net

...