我想以重复的方式执行一些代码:
实际上我计划使用该代码来执行某些服务器的调用,这些服务器有时会停机几秒钟。
我是Rx的新手,在问这个问题之前尝试了一些方法(大约2个小时阅读文档和编写代码)并决定,我需要一些例子。
我想得到这样的东西(不是工作代码,只是原型):
Observalbe.Create(
() => {
// TODO: some code here (it can throw exceptions)...
}
).Retry(N)
.Delay(T)
.Subscribe(
result => { Log.Info("The result is {0}", result); },
error => { Log.Error(error, "Error occured"); }
)
我知道,Rx是神奇的,但我应该用什么样的魔法来达到预期的效果?
答案 0 :(得分:3)
使用Polly之类的东西可能会更好,它允许您简洁地指定异常处理策略。
var policy = Policy.Handle<Exception>()
// Retry 5 times waiting 1 second in between
.WaitAndRetry(5, x => TimeSpan.FromSeconds(1), (e,d,c) =>
{
Console.WriteLine("Count = {0}, Message = {1}", c.Count, e.Message);
});
policy.Execute(() =>
{
throw new Exception("Error!");
});