Выполнять задачи с разными интервалами в рабочей роли Azure - PullRequest
5 голосов
/ 27 ноября 2011

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

    public override void Run()
    {
        try
        {
            while (true)
            {
                DoSomething();
                System.Threading.Thread.Sleep(3000);
            }

        }
        catch (Exception ex)
        {
            Log.Add(ex, true);
        }            
    }

Теперь я хотел бы добавить вторую задачу DoSomethingElse (), которая запускается один раз и только один раз в день.Я подумал о нескольких способах сделать это:

  1. Добавить счетчик, который вызывает новую задачу каждый n-й цикл
  2. Добавить условную логику в новую задачу, которая сравнивает текущуювремя до предписанного времени суток
  3. Использовать некоторую библиотеку планировщика TBD (например, Quartz.NET)

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

Мой вопрос таков: как лучше всего планировать задачи на разные промежутки времени в рабочей роли Azure?У меня есть небольшое предпочтение придерживаться прямого .NET и не использовать стороннюю библиотеку (хотя я не исключаю этого).

Обратите внимание, # 3 выше взято из этого старого вопроса Рекомендоватьбиблиотека планирования задач C #

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Первые два варианта являются самыми простыми, но они хрупкие - особенно в облаке, где роли могут быть переработаны / сбалансированы по нагрузке и т. Д. Если постоянство в памяти или даже на диске в облаке, то оно будет хрупким.

Помимо других сторонних опций, вы можете посмотреть на сохранение данных о расписании и выполнении во внешнем хранилище (табличные службы, sql azure и т. Д.).В периодическом таймере рабочая роль может запрашивать задания, которые должны быть выполнены, записывать запуск, а затем запускать задание.Это также позволяет вам потенциально сократить количество рабочих ролей, поскольку их постоянство является внешним.

Это может усложниться в спешке, но если вы будете делать это просто с частотой и временем записи, это может быть довольно просто.

1 голос
/ 27 ноября 2011

Стив Маркс написал замечательную пару записей в блоге на о том, как построить планировщик задач в Windows Azure с использованием аренды BLOB-объектов , я думаю, вы найдете это очень полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...