Observables vs Tasks - 首选实施?

use*_*225 6 .net multithreading system.reactive c#-4.0

我只是想异步检索数据,并在检索数据后,在UI(Winforms)中显示它.

使用.net 4.0,有两种方法可以实现这个(我知道还有更多,但我使用这两种方式):

    var task = Task.Factory.StartNew(() => RetrieveData());
    task.ContinueWith(x => SetDataInUi(x.Result), TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

要么

var obs = Observable.Start(() => RetrieveData());
obs.ObserveOn(SynchronizationContext.Current).Subscribe(x => SetDataInUi(x));
Run Code Online (Sandbox Code Playgroud)

据我所知,这些都会做同样的事情.是否有理由选择其中一个?

小智 5

如果您只是想从某个地方请求数据并将其打印到屏幕上,我宁愿选择第一个解决方案.

第二个也可以工作,但RX旨在帮助您处理数据流.我们都同意,当你可以使用一个简单的解决方案时,使用复杂的解决方案并不酷

  • 有成长空间并不是坏事。如果他希望现在从用户交互中触发此提取怎么办?如果他最终想以更复杂的方式使用 Observables,就没有理由不从它开始。有时可维护性更重要,当然 Rx 更具有立即可读性和可组合性。我发现 Observables *可以*用于做更复杂的事情,但这并不会使它们本身变得复杂。我发现这个选择比其他任何事情都更取决于品味。 (2认同)
  • 我不同意.Rx更具表现力(部分原因是使用了LINQ表达式).Rx还能够将.NET中的所有异步和事件编程模型统一到一个模型中.值得使用它. (2认同)