Как использовать пользовательский таймер для функций Azure? - PullRequest
0 голосов
/ 24 февраля 2019

Очевидно, раньше был способ создания пользовательских таймеров для функций Azure, создав класс, который наследуется от TimerSchedule, и определив пользовательскую логику в его методе GetNextOccurrence.

Мы получили сообщение MSDN об этом, , у нас есть ответ StackOverflow об этом и даже некоторый официальный пример кода, который использует пользовательские таймеры.

Ничего из этого не работает.

Ни один из этих примеров не имеет атрибута FunctionName в своих функциях, который необходим (по крайней мере, в текущей версии SDK; не уверен, как долго это происходило)чтобы заставить работать функцию Azure.А в текущем SDK любая функция, имеющая как FunctionName, так и TimerTrigger, использующая пользовательский тип таймера, не сможет сработать с такой ошибкой:

System.NotImplementedException: Property«ScheduleType» для атрибута «TimerTriggerAttribute» не поддерживается в функциях Azure.

По-видимому, раньше это работало, но сейчас это не так, и у меня есть куча времени, чтобы найти какой-либо соответствующийинформация о том, как правильно сделать это сейчас.Кто-нибудь знает, как по-новому настроить пользовательский таймер?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Это не может быть сделано с таймерами напрямую.Очереди могут быть правильным выбором: предыдущий прогон должен был бы создать сообщение и отправить его в очередь.Убедитесь, что сообщение становится видимым только через указанное время.

Альтернативой является использование Durable Functions, в частности «вечной оркестровки».Посмотрите пример в официальных документах здесь , где задание запускается через определенное количество времени после окончания предыдущего.

0 голосов
/ 25 февраля 2019

Все они связаны с веб-заданиями - функции Azure не являются веб-заданиями.

Веб-задания Azure против функций Azure: как выбрать

С учетом функций Azureесть функция подобного таймера - она ​​даже использует пакеты веб-заданий Nuget.

Триггер таймера для функций Azure

В следующем примере показана функция C #, которая выполняетсякаждый раз, когда минуты имеют значение, кратное пяти (например, если функция начинается в 18:57:00, следующее исполнение будет в 19:00:00):

[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
...