从IObservable <t>到任务</t>

时间:2015-02-24 03:46:39

标签: task-parallel-library system.reactive reactive-programming observable

所以情况就是这样。假设某个地方我正在填写一个集合。每次添加元素时,IObservable都会为其订阅者调用OnNext。

现在,将会有一个集合将被填充的点。 (我正在读一些东西,我读完了......无论如何)。此时,在订阅者上调用OnComplete()。

但是,用户不会遵守此方法。他宁愿打电话给他等待的异步方法......他并不关心他读的东西,他只关心他读完了。

基本上,我想从IObservable中获取一个Task,它在IObservable调用OnComplete()时返回给它的订阅者。我特别希望用户不要使用观察者,但只是要知道在他的等待调用之后发生的任何事情都会在收集完成后发生。

也许ToTask()方法可以解决这个问题?我无法通过文档说出来。

1 个答案:

答案 0 :(得分:7)

如果您使用的是Rx 2.0或更高版本,则可以await IObservable返回observable中的最后一项。即在观察完成后。

var lastItem = await myObservable;

这是可能的,因为在Rx 2.0中添加了GetAwaiter上的IObservable扩展方法,使得await可观察对象成为可能。还有一些方便的扩展方法,允许您指定要等待的元素。

有一个关于它的好文章here