rxnet中的c#方法catch



我有一个处理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);

最新更新