我想创建一个观察对象,当右侧观察对象发出一个值时,该观察对象会发出一个值,并随之带走最后一个左侧观察对象值,即,如以下大理石图表所述(摘自combining-sequences)
阅读上面链接中的文档表明,这可以通过确保不相交的左持续时间 Select 器和立即返回的右持续时间 Select 器来实现.所以我try 了这个:
leftObservable.Join(rightObservable, _ => leftObservable.Publish().RefCount(), _ => Observable.Empty<Unit>(), (l,r) => (l,r))
但它似乎没有发出任何东西.我做错了什么?
Update
我认为这可能归因于加入声明中的可观察性,即,它们起源于switch
,例如,
var left1 = Observable.Interval(TimeSpan.FromSeconds(5));
var left2 = Observable.Interval(TimeSpan.FromSeconds(7));
var left = left1.Select(x => left2).Switch();
var right = Observable.Interval(TimeSpan.FromSeconds(1));
var test = left.Join(right, _ => left.Publish().RefCount(), _ => Observable.Empty<Unit>(), (l, r) => (l, r))
.Distinct(x => x.r)
.Subscribe(x =>
{
Debug.WriteLine($"left: {x.l}, right: {x.r}");
});
如果我在join
声明中用left
替换left
,事情就会按照预期进行.所以我一定误解了switch
在这种情况下的运作方式?