【发布时间】:2020-06-29 16:23:17
【问题描述】:
我必须确保完成一个 Observable。它正在观察流数据,这不是我要修改的重点。 流数据可能根本不打勾。 我遇到了一个主题成员,我可以用它来手动完成 observable。
private readonly Subject<bool> _mySubject = new Subject<bool>();
// relevant property that should be completed
public IObservable<myModel> StreamObservable { get; private set; }
IObservable<myModel> someDataObservable = ... ; // may not tick in scenario
// this doesn't work
StreamObservable = someDataObservable
.TakeUntil(_mySubject)
.Finally(() => logger.LogInformation("completed!"));
_mySubject.OnNext(true);
// I tried Amb.. still not going into Finally(), also when someDataObservable doesn't tick
StreamObservable = Observable.Amb(_mySubject.SelectMany(value => Observable.Empty<myModel>()), someDataObservable)
.Finally(() => logger.LogInformation("completed!"));
_mySubject.OnNext(true);
如何完成,最好使用 Subject.OnNext() ?
主题触发器只是一个想法。我的偏好是留在观察世界并将序列转换为 Observable.Empty(),例如当这样的回调被调用时:
private Task<bool> FinishStreamCallback()
{
_mySubject.OnNext(true); // my first approach
return Task.FromResult(true);
}
.. 使用 OnCompleted()-订阅另一个类中的相关公共 observable 进行定位。
【问题讨论】:
标签: c# system.reactive subject-observer