使用Observable.SelectMany忽略源集合中除最新项之外的所有项

问题描述 投票:1回答:1

特定

// observable getting files in folder as they are created
IObservable<string> files = GetFilesAsTheyAreCreated();

和功能

// gets lines of the file as they are written
IObservable<string> GetLines(string filePath)

我想创建一个observable,返回写入最后创建的文件的行。随着新文件的创建,我想开始从该文件中获取行。现在我有以下代码:

var lines = files.SelectMany(f => GetLines(f));

这个问题是我也将所有行添加到旧文件中。有没有办法忽略那些旧线?

注意:我最感兴趣的是取消GetLines observable,因为它在新线程上运行。

这可以通过内置运营商实现吗?

c# .net system.reactive
1个回答
4
投票

你需要的是超级简单:

var lines = files.Select(f => GetLines(f)).Switch();

.Switch()算子通过仅从最近的外部可观测量返回内部值将IObservable<IObservable<T>>变成IObservable<T>。正是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.