【发布时间】:2022-02-25 15:55:59
【问题描述】:
我有一个(或两个)反应式方法的新问题。 在我的场景中,我需要一个能够在第一个任务未完成时抑制其他发出的任务的可观察序列,并最终得到如下结果:
Observable.Interval(TimeSpan.FromMilliseconds(200))
.Select(x => Observable.FromAsync(async () =>
{
await Task.Delay(1000);
// Simulating long running task
Console.WriteLine(x);
}))
.Publish(x => x.FirstAsync().SelectMany(c => c).Repeat())
.Subscribe();
我尝试了谷歌,但我真的无法解释一些事情:
- 首先,它是如何工作的?????
- 阻止可观察对象到达订阅的反应序列究竟是什么?
Replay究竟做了什么?在这种情况下,Replay不应该重播任务吗?或者我不知道。 任何人都可以详细解释该反应式查询中的每一步吗?Publish对这种选择器有什么作用。Replay在该查询中的表现如何?如果无论如何只会发出一个元素,为什么我需要在FirstAsync上调用SelectMany。
【问题讨论】:
-
如果您的代码有效会有所帮助。
-
关于在先前启动的任务完成之前阻止新任务启动的初始任务,您可能正在寻找
ExhaustMap运算符。
标签: c# .net asynchronous system.reactive