Force flush to Observable.Buffer c#

后端 未结 2 1233
鱼传尺愫
鱼传尺愫 2021-01-06 03:11

Is there any way to force a Observable.Buffer to flush before the end of buffered time?

In the example:

mSubscription = mFluxObservable.Buffer(new Time

相关标签:
2条回答
  • 2021-01-06 03:51

    ...and basically the same principal using window:

    var bufferPeriod = TimeSpan.FromSeconds(1.5);
    var source = Observable.Interval(TimeSpan.FromMilliseconds(100)).Take(50);
    
    //source.Buffer(bufferPeriod).Dump();
    
    var bufferFlush = new Subject<long>();//Or Subject<Unit>
    source.Window(
            ()=>Observable.Merge(Observable.Timer(bufferPeriod), bufferFlush))
        .Select(window=>window.ToList())
        .Dump();
    
    //Simulate calling flush.
    Observable.Interval(TimeSpan.FromMilliseconds(1350)).Take(2).Subscribe(bufferFlush);
    
    0 讨论(0)
  • 2021-01-06 04:07

    This worked for me:

    var subject = new Subject<Unit>();
    var closing = Observable
        .Timer(new TimeSpan(0, 0, 1, 30))
        .Select(x => Unit.Default);
    
    var query =
        mFluxObservable
            .Buffer(() => Observable
                .Amb(subject, closing)
                .Take(1));
    

    Now I only need to call subject.OnNext(Unit.Default) to force the buffer to flush. A new buffer is started immediately after the flush.

    0 讨论(0)
提交回复
热议问题