从 IObservable<T> 到 Task

From IObservable<T> to Task

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

现在,将有一个收集点将被填充。 (我正在读一些东西,然后我读完了……随便什么)。此时,订阅者调用 OnComplete()。

但是,用户不会遵守此方法。他宁愿调用他将等待的异步方法……他不太关心他阅读的内容,他只关心他读完了。

所以基本上,我想从一个 IObservable 中得到一个 returns 当 IObservable 向其订阅者调用 OnComplete() 时的任务。我特别希望用户不要使用观察者,而只是高兴地知道在他的 await 调用之后发生的任何事情都会在收集完成后发生。

也许 ToTask() 方法可以解决问题?我真的无法通过文档来判断。

如果您使用的是 Rx 2.0 或更高版本,您可以 await IObservable 其中 returns observable 中的最后一项。 IE。在 Observable 完成后。

var lastItem = await myObservable;

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

有一篇关于它的不错的博客 here