0

我有服务于 cron 表达式

    public Task DoProcessAsync()
    {
        return transactionService.CommitAsync(() => DoProcess());
    }

    private async Task DoProcess()
    {
        try{...}

        catch{logger.logError("error");}
    }

但是我知道在这个地方尝试捕获块我不好,因为 Commit 会被接受。我也有

    public Task Start()
    {
        exportCron = CronExtensions
             .Cron(sheduleConfiguration.SetCitiesCronExpression)
             .Select(x => Observable.FromAsync(() => setCitiesToClientsService.DoProcessAsync()))
             .Concat()
             .Subscribe();

        return Task.FromResult(0);
    }

所以也许我可以将方法 catch() 放到这个扩展中?如果是,我该怎么做?

我找到了

.Subscribe(onNext => { }, onError => { logger.LogError("Error"); } );

但是sequnce在出错后停止工作,但必须继续。有一些提议吗?

4

2 回答 2

0

您可以在您的 Observable 定义上使用: Retry(5) 它重试 5 次,或 Retry() 无限。

例子:

         Observable testObservable =
            Observable
                .Interval(TimeSpan.FromMilliseconds(20000))
                .Select(x => WhatEver()).ObserveOn(SynchronizationContext.Current)
                .Retry(retry);
于 2018-01-25T11:10:58.643 回答
0
public async Task DoProcess()
{
    try
    {
        await Start();
    }
    catch (Exception e)
    {
    }
}

public Task DoProcess()
{
    try
    {
        Start().Wait();
    }
    catch (Exception e)
    {
    }
} 
于 2016-10-18T20:34:49.720 回答