我已经看到围绕使用Observables而不是使用async / await的任务进行了一些讨论。我目前几乎只使用CreateFromTask。我一直试图理解使用CreateFromObservable而不是CreateFromTask的原因。
如果是这样,那么将CreateFromTask转换为CreateFromObservable的最佳方法是什么。
答案 0 :(得分: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 System.Reactive.Threading.Tasks
我通常做的就是用Facade包装所有基于任务的库,并使用ToObervable公开它们。如果您正在使用反应性解决方案,它将使生活更容易在Observables的土地上工作,反对混合和匹配。
CreateFromObservable与CreateFromTask相比的原因是该库假设您的解决方案主要是被动的,因此它将成为它期望事物的主要方式。创建这些命令的所有其他方法实际上只是帮助者,最终使用CreateFromObservable