c# - 响应式扩展订阅调用等待

标签 c# async-await system.reactive

我想针对响应式扩展 Observable 引发的每个事件 执行异步调用。我还试图使所有内容保持同步,因为我希望在处理下一个事件之前完成异步调用。

如何做类似于以下的事情?我说类似是因为下面的代码无法编译。

settingsChangedInMemory
    .Subscribe(async _ => {
        var settings = Extract();
        await SaveSettings(settings);
    });

我不确定它是否改变了什么,但我需要订阅多个 Observable。例如另一个像这样的订阅。

settingsChangedOnDisk
    .Subscribe(async _ => {
        var settings = await ReadSettings(settings);
        Apply(settings);
    });

您将如何使用 Reactive Extensions 来做到这一点?

最佳答案

怎么样:

settingsChangedInMemory
    .SelectMany(async _ => await SaveSettings(Extract()))
    .Subscribe(x => Apply(x));

永远不要将 async 放在 Subscribe 中,您总是希望将它放在 SelectMany 中。

关于c# - 响应式扩展订阅调用等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24843000/

相关文章:

C# 如何从 VS2008 代码指标中排除生成的代码?

c# - 从客户端获取修改后的对象并将其与服务器上的原始对象组合

c++ - 线程 sleep VS 等待条件

c# - ApiController 中的异步初始化

f# - IObservable.Add 与 IObservable.Subscribe

c# - 将网址转换为有效的 href 值

c# - 多次调用 OnAuthorization

javascript - 将异步并行请求映射到它们的 ID

c# - 什么是 System.Reactive.Linq.Observαble? (注意阿尔法)

c# - 执行后处置ReactiveCommand