Reactive Extensions订阅呼叫等待

Dan*_*tle 13 c# system.reactive async-await

我想基于Reactive Extensions Observable引发的每个事件执行异步调用.我也试图让所有内容保持同步,因为我希望在处理下一个事件之前完成异步调用.

怎么会去做类似以下的事情呢?我说类似下面的代码不编译.

settingsChangedInMemory
    .Subscribe(async _ => {
        var settings = Extract();
        await SaveSettings(settings);
    });
Run Code Online (Sandbox Code Playgroud)

我不确定它是否会改变任何东西,但我需要订阅多个Observable.例如,像这样的另一个订阅.

settingsChangedOnDisk
    .Subscribe(async _ => {
        var settings = await ReadSettings(settings);
        Apply(settings);
    });
Run Code Online (Sandbox Code Playgroud)

您将如何使用Reactive Extensions执行此操作?

Ana*_*tts 18

怎么样:

settingsChangedInMemory
    .SelectMany(async _ => await SaveSettings(Extract()))
    .Subscribe(x => Apply(x));
Run Code Online (Sandbox Code Playgroud)

永远不要放在async一个Subscribe,你总是想把它放在一个SelectMany.

  • 你介意精心制作保罗吗?他们明确声明他们支持订阅中的异步,并且您的响应并没有真正解释为什么Reactive的开发人员是错误的. (7认同)
  • 绝对是真的 (2认同)
  • “async”可以安全地进入“Select”以及“SelectMany”吗? (2认同)