sách gpt4 ai đã đi

c# - 值与 Rx 之间

In lại 作者:行者123 更新时间:2023-12-04 02:10:12 31 4
mua khóa gpt4 Nike

Rx 中是否有一些扩展方法来完成下面的场景?

Between values

我有一个开始泵送的值(绿色圆圈)和其他停止泵送的值(簧片圆圈),蓝色圆圈应该是预期值,我不希望这个命令被取消并重新创建(即“TakeUntil”和“SkipUntil”将不起作用。

使用 LINQ 的实现是这样的:

  public static IEnumerable TakeBetween(this IEnumerable source, Func entry, Func exit)
{
bool yield = false;
foreach (var item in source)
{
if (!yield)
{
if (!entry(item))
continue;

yield = true;
continue;
}

if (exit(item))
{
yield = false;
continue;
}

yield return item;
}
}

IObservable 怎么会有同样的逻辑? ?

1 Câu trả lời

以下是您需要的扩展方法:

public static IObservable TakeBetween(
this IObservable source,
Func entry,
Func exit)
{
return source
.Publish(xs =>
{
var entries = xs.Where(entry);
var exits = xs.Where(exit);
return xs.Window(entries, x => exits);
})
.Switch();
}

我在其中包含的关键内容是 Publish 扩展的使用。在这种特殊情况下,这很重要,因为您的源可观察值可能是“热的”,这使得源值可以共享而无需创建对源的多个订阅。

关于c# - 值与 Rx 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791622/

31 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com