gpt4 book ai didi

c# - 使用 Rx 订阅 bool 状态

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:46 25 4
gpt4 key购买 nike

我有一个 IObservable<bool>我想在最后一次 n 时收到通知项设置为 true。

为此,我正在尝试类似的事情:

MyBool.Buffer(10).SelectMany(x => x).All(x => x).Subscribe(x => /*do something*/);

但它只会触发一次;好像是 OnCompleted以某种方式被解雇。

最佳答案

您正在有效地缓冲和展平您的可观察对象。调用 .Buffer(10).SelectMany(x => x) 就像一个非操作,因为它会发出所有进入的内容。

你需要做的更像这样:

    MyBool
.Buffer(10, 1)
.Select(xs => xs.All(x => x))
.Where(x => x);

我假设您想知道每当连续出现 10 个 true 时,如果有 11 个,您会收到两次通知。


Buffer(10, 1) 背后的原因是 Buffer 的工作方式 - 这提供了一个包含 10 元素的缓冲区并移动1。如果我执行 Buffer(10),我将获得 10 个元素并向前移动 10 个。

如果我执行 Observable.Range(0, 5).Buffer(3) 我得到 {0, 1, 2}, {3, 4},但是如果我执行 Observable.Range(0, 5).Buffer(3, 1) 我得到 {0, 1, 2}, {1, 2, 3}, {2, 3 , 4}, {3, 4}, {4}.

如果你想知道什么时候 falsetrue 之后出现,那么试试这个:

MyBool
.Buffer(3, 1)
.Select(xs => xs.All(x => x))
.Buffer(2, 1)
.Where(x => x[0] || x[1]);

这给出了这些可能的组合:

results

关于c# - 使用 Rx 订阅 bool 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com