Hangfire重试模式

时间:2019-05-15 12:33:54

标签: c# design-patterns hangfire

可以重试任务,直到条件未完成?例如

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,因为我们已经将它用于工作,但是如果不合适,我可以腾出手来。您能推荐一些可以满足我需求的图书馆吗,您对此有很好的经验?

0 个答案:

没有答案