C# 可观察。生成延迟结果
以下代码将结果延迟2秒。我想要的是立即返回结果,但每2秒启动一个新的observable。我错过了什么 产出: 代码: 那么:C# 可观察。生成延迟结果,c#,system.reactive,scheduler,observable,C#,System.reactive,Scheduler,Observable,以下代码将结果延迟2秒。我想要的是立即返回结果,但每2秒启动一个新的observable。我错过了什么 产出: 代码: 那么: Observable.Interval(TimeSpan.Zero, TimeSpan.FromSeconds(2.0)) .SelectMany(_ => GenerateAnObservable()) .Subscribe(/* ... */); 替换当前的可观察对象如何。使用以下内容生成: Observable .Generate(
Observable.Interval(TimeSpan.Zero, TimeSpan.FromSeconds(2.0))
.SelectMany(_ => GenerateAnObservable())
.Subscribe(/* ... */);
替换当前的可观察对象如何。使用以下内容生成:
Observable
.Generate(
0,
i => true,
i => i + 1,
i => i,
i => TimeSpan.FromMilliseconds(i == 0 ? 0 : 2000),
ThreadPoolScheduler.Instance)
.Zip(sources, (g, s) => s)
我得到了这个结果:
41: 1. Run
41 Result: 1
43: 2. Run
43 Result: 2
45: 3. Run
45 Result: 3
47: 4. Run
47 Result: 4
49: 5. Run
49 Result: 5
51: 6. Run
51 Result: 6
53: 7. Run
53 Result: 7
55: 8. Run
55 Result: 8
Completed
我在每个循环中都使用generate作为可变周期选择器。这里真的一点也不清楚你在追求什么——我想你对Paul的回答的评论意味着你想要可变的数据驱动间隔,但除此之外,我训练有素的Rx眼睛在你的代码中有很多奇怪的东西。也许用非rx术语解释一下你想要达到的目标是有用的。例如,我们并不完全清楚为什么要像IEnumerable那样为源代码创建IEnumerable。还不清楚源是否应该包含指示所需间隔的数据。
Observable
.Generate(
0,
i => true,
i => i + 1,
i => i,
i => TimeSpan.FromMilliseconds(i == 0 ? 0 : 2000),
ThreadPoolScheduler.Instance)
.Zip(sources, (g, s) => s)
41: 1. Run
41 Result: 1
43: 2. Run
43 Result: 2
45: 3. Run
45 Result: 3
47: 4. Run
47 Result: 4
49: 5. Run
49 Result: 5
51: 6. Run
51 Result: 6
53: 7. Run
53 Result: 7
55: 8. Run
55 Result: 8
Completed