使用 Microsoft.Bcl.Async 在 Net 4.0 中等待 Observable

Await Observable in Net 4.0 with Microsoft.Bcl.Async

我正在使用面向 Net 4.0 的 Microsoft Visual Studio Comunity 2015。我通过 Nuget 安装了以下内容:Rx-Main 2.2.5,Microsoft.Bcl.Async 1.0.168。我需要等待一个 Observable,但是当我写

Await Observable.Return(42)

我收到一个编译器错误:

"BC36930 'Await' requires that the type 'IObservable(of Integer)' have a suitable GetAwaiter method."

请注意,我可以等待 Task,如 Await TaskEx.FromResult(42),但不能等待 Observable。我使用对象浏览器检查 Rx 库,但没有 GetAwaiter 扩展方法,而 Github repo 确实包含它在 System.Reactive.Linq.Observable class 中。有没有办法解决这个问题,还是我应该坚持 Await Observable.Return(42).ToTask

不幸的是,当您以 .NET 4.5 及更高版本为目标时,GetAwaiter 和 INotifyCompletion 的实现仅被编译到 Rx 中。在源代码中查看此 example

在这种情况下,您想使用 ToTask() 将可观察对象转换为任务,或者使用提供的 XXXAsync 方法之一,例如 FirstAsync()