ReactiveCommand.CreateFromTask vs ReactiveCommand.CreateFromObservable

Bri*_*ins 6 reactiveui

我已经看到一些关于使用Observables而不是使用async/await的任务的讨论.我目前几乎只使用CreateFromTask.我一直试图理解使用CreateFromObservable而不是CreateFromTask的原因.

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

Sha*_*lle 5

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
Run Code Online (Sandbox Code Playgroud)

我通常做的就是用Facade包装我所有的基于任务的库,并使用ToObervable公开它们.如果您正在使用反应性解决方案,它将使生活更容易在Observables的土地上工作,反对混合和匹配.

CreateFromObservable优于CreateFromTask的原因是该库假设您的解决方案主要是被动的,因此它将成为它期望事物的主要方式.创建这些命令的所有其他方法实际上只是帮助者,最终实现CreateFromObservable