gpt4 book ai didi

c# - .Net 响应式扩展 : Remove Replay

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:44 27 4
gpt4 key购买 nike

在下面的代码中,我使用 Replay() 来避免在执行 stuff [...] 时价格更新丢失。我需要在 stuff[...] 完成后发送这些价格更新。

var observable = Observable.FromEventPattern<Price>(h => book.PriceUpdated += h, h => book.PriceUpdated -= h)
.Replay();
observable.Connect();

// Do some stuff [...]

observable.Select(p => Observable.FromAsync(() => SendPriceUpdateAsync(p.Sender, p.EventArgs, socket)))
.Concat()
.Subscribe();

我想在 stuff [...] 完成并发送价格后删除 Replay()(我不希望所有值都是已存储,发送后我不再需要这些值)。

有什么简单的方法吗?

最佳答案

所以您真正想要的是延迟所有事件,直到您完成做一些事情。我建议根本不要使用 Replay。

改为尝试这样的方法:

var observable = eventObservable
.TakeUntil(Observable.Start(() => { /* Do some stuff [...] */ })) //collect only events while processing, completes the observable when done processing
.ToList() //with ToList only propagate all at once on completion
.SelectMany(list => list.ToObservable()) //unfold the list to single events again
.Concat(eventObservable); //continue with normal events observable

关于c# - .Net 响应式扩展 : Remove Replay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57284908/

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