我有以下方法负责调用我的服务类并将结果传递给另一个方法以将它们保存在我的数据库中:
public IObservable<bool> SyncSessions()
{
var subject = new ReplaySubject<bool>();
try
{
var query = new ByFilterQuery { SearchPeriodStartTime = DateTime.Now };
var sessions = _sessionService.GetSessions(query).Result;
var saved = SaveSessions(sessions);
subject.OnNext(saved);
subject.OnCompleted();
}
catch (Exception ex)
{
subject.OnError(ex);
}
return subject;
}
如果服务器返回 500 或类似的值,_sessionService.GetSessions 将抛出 HttpRequestException。我有一个模拟这种行为的单元测试,并想测试我的方法优雅地处理错误。
有没有更好的方法以 Rx 方式传播错误?我试着做:
_sessionService.GetSessions(query).ToObservable().Select(SaveSessions);
但这引发了我的错误,而不是将其传递给调用方法中的错误处理操作。我还计划将此方法与其他几种方法合并,并在合并的庄园中处理错误。
编辑:这是我订阅 observable 的方式
Exception error = null;
_sessionManager
.SyncSessions()
.Subscribe(null, e => error = e);
Assert.That(error, Is.Not.Null.After(500));
我将 null 传递给第一个参数,因为在此测试的上下文中我并不真正关心它