当前,我正在发出nhibernate中的数据库选择,该数据库返回结果的IList
。然后,我在返回的列表上使用IList.ToObservable
来获取我可以订阅的IObservable
。我如何在反应范式中写下这一点,而不仅仅是将列表转换为 IObservable
?
使用反应性扩展进行数据库调用的最佳方法是完全不做。
一线一线,这是一个严肃的观点。线索是问题...您正在做一个IO BOND BOND call ,因此您确实处于异步拉动情况。
在C#8中对此有一流的语言支持(iasyncenumerable-在Rx GitHub repo中已经有占位符)。
但是,当您启动呼叫时,您确实不想将同步呼叫响应视为可观察到的呼叫。当您不知道是否或何时出现数据时,可观察的是推送方案。您可以使查询异步和传统上更加传统上处理结果。
您经常在Rx中看到异步数据库的查询是植根于某些可观察到的事件的可观察链的一部分,例如UI中的键盘。按键事件被馈入可观察到的事件,进而将其投影到 async 查询中,并弹出回到UI中。例如:此处的示例具有一个服务调用,可以很容易地成为异步数据库查询。关键部分是使用getSuggestions
异步CAL及其如何连接到可观察的查询。
注意,即使在这种情况下,服务调用本身仍然是一种异步拉动,无法直接返回可观察的。它是由其他观察到的事件引发的。