ReactiveCommand.CreateFromTask 对比 ReactiveCommand.CreateFromObservable

ReactiveCommand.CreateFromTask vs ReactiveCommand.CreateFromObservable

我看到一些关于使用 Observables 而不是 async/await 任务的讨论。我目前几乎完全使用 CreateFromTask。我一直在尝试理解使用 CreateFromObservable 而不是 CreateFromTask 背后的原因。

如果是这样,将 CreateFromTask 转换为 CreateFromObservable 的最佳方法是什么。

CreateFromTask 实际上只是作为一个助手存在,因为我们生活在一个主要基于任务的世界中:-) 在一个完美的反应世界中,您使用的所有库都只会公开 Observables。然后你就可以端到端的 Observables 了。但事实并非如此 RxUI 包括一些帮助程序,可以轻松地将任务拉入命令。

如果你看这里 https://github.com/reactiveui/ReactiveUI/issues/1245

您会看到甚至有人讨论要摆脱这些助手。

如果您查看 "CreateFromTask" 的代码,它所做的就是在任务上调用 ToObservble() 以将其转换为 Observable,然后代码调用 CreateFromObservable

https://github.com/reactiveui/ReactiveUI/blob/develop/src/ReactiveUI/ReactiveCommand.cs#L418

所以对于这个问题,我只想说在 Task 上调用 ToObservable 是转换它的最佳方式。您需要包含此 using 语句

using System.Reactive.Threading.Tasks

我通常做的只是用外观包装所有基于任务的库,然后使用 ToObervable 公开它们。如果您要使用响应式解决方案,那么在 Observables 领域工作将比混合和匹配更容易。

CreateFromObservable 而不是 CreateFromTask 背后的原因是库假设您的解决方案主要是反应性的,因此这将是它预期事物的主要方式。创建这些命令的所有其他方法实际上只是帮助程序,最终使它们成为 CreateFromObservable