Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制刷新到可观察状态。缓冲区c#_C#_C# 4.0_Buffer_System.reactive - Fatal编程技术网

强制刷新到可观察状态。缓冲区c#

强制刷新到可观察状态。缓冲区c#,c#,c#-4.0,buffer,system.reactive,C#,C# 4.0,Buffer,System.reactive,有没有办法在缓冲时间结束前强制可观察的缓冲区刷新 在示例中: mSubscription=mFluxObservable.Buffer(新的时间跨度(0,0,1,30)).Subscribe(o=>saver(o,iSessionId)) 我想在1:30时段结束前刷新数据 这对我很有用: var subject = new Subject<Unit>(); var closing = Observable .Timer(new TimeSpan(0, 0, 1, 30))

有没有办法在缓冲时间结束前强制可观察的缓冲区刷新

在示例中:

mSubscription=mFluxObservable.Buffer(新的时间跨度(0,0,1,30)).Subscribe(o=>saver(o,iSessionId))

我想在1:30时段结束前刷新数据

这对我很有用:

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));
var subject=new subject();
var关闭=可观察
.计时器(新的时间跨度(0,0,1,30))
.Select(x=>Unit.Default);
变量查询=
可观察的
.Buffer(()=>可观察
.Amb(主题,结束)
.采取(1)项措施;

现在我只需要调用
subject.OnNext(Unit.Default)
来强制刷新缓冲区。刷新后立即启动一个新的缓冲区。

…并且基本上使用相同的主体窗口:

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);
var bufferPeriod=TimeSpan.FromSeconds(1.5);
var source=可观测的时间间隔(TimeSpan.From毫秒(100)).Take(50);
//source.Buffer(bufferPeriod.Dump();
var bufferFlush=新主题()//或主题
来源.窗口(
()=>Observable.Merge(Observable.Timer(bufferPeriod),bufferFlush))
.Select(window=>window.ToList())
.Dump();
//模拟调用flush。
可观察的。间隔(TimeSpan.From毫秒(1350)).Take(2).订阅(bufferFlush);