Повторить шаблон Hangfire - PullRequest
0 голосов
/ 15 мая 2019

Можно ли повторить задание, пока условие не будет выполнено?например,

internal class Program
{
    private static void Main(string[] args)
    {
        var user = new User();
        var jobs = new Jobs();

        Hangfire.BackgroundJob.Enqueue(() => jobs.SendNotification(user));
    }
}


public class Jobs
{
    Rules rules = new Rules();

    public void SendNotification(User user)
    {
        if (rules.Rule1() && rules.Rule2())
        {
            // send notification
            return;
        }

        // somehow retry the execution of this method (throw exception does not seem right)
    }
}

public class Rules
{
    public bool Rule1() { return true; }

    public bool Rule2() { return true; }
}

public class User { }

Я знаю, что можно повторить выполнение метода, выдав исключение, но это не кажется правильным, поскольку я знаю, что восстановление из исключения довольно дорого, и оно пометит задание как невыполненное вИнтерфейс администратора Hangfire, который не соответствует действительности.

Я мог бы написать шаблон повторов сам, но мне нравится, как Hangfire сохраняет всю информацию, связанную с обработкой фоновых заданий, в постоянное хранилище (в моем случае SQL), данные не сохраняются в памяти процесса.Поэтому я предполагаю, что он может восстановить очередь из хранилища даже после выключения сервера и продолжить обработку.

Примечание: я хотел бы использовать Hangfire, потому что мы уже используем его для рабочих мест, но если он не подходит, у меня естьсвободная рукаНе могли бы вы порекомендовать какую-нибудь библиотеку, которая может делать то, что я хочу, и у вас есть хороший опыт работы с ней?

...