从 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。
所以情况是这样的。假设我在某个地方填充一个集合。每次添加元素时,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。