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