Выполнение задач с разной периодичностью в рабочей роли Azure

У меня работает простая рабочая роль 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 #

5
задан Community 23 May 2017 в 12:33
поделиться