我有一个处理cron表达式的服务
public Task DoProcessAsync()
{
return transactionService.CommitAsync(() => DoProcess());
}
private async Task DoProcess()
{
try{...}
catch{logger.logError("error");}
}
但是我知道block try catch在这个地方不是很好,因为Commit会被接受。还有
public Task Start()
{
exportCron = CronExtensions
.Cron(sheduleConfiguration.SetCitiesCronExpression)
.Select(x => Observable.FromAsync(() => setCitiesToClientsService.DoProcessAsync()))
.Concat()
.Subscribe();
return Task.FromResult(0);
}
所以也许我可以把方法catch()到这个扩展?如果是,我该怎么做?
I've found
.Subscribe(onNext => { }, onError => { logger.LogError("Error"); } );
但序列在错误后停止工作,但必须继续。有什么建议吗?
public async Task DoProcess()
{
try
{
await Start();
}
catch (Exception e)
{
}
}
public Task DoProcess()
{
try
{
Start().Wait();
}
catch (Exception e)
{
}
}
你可以使用你的Observable定义:Retry(5)它重试5次,或者Retry() infinite。
的例子:
Observable testObservable =
Observable
.Interval(TimeSpan.FromMilliseconds(20000))
.Select(x => WhatEver()).ObserveOn(SynchronizationContext.Current)
.Retry(retry);