使用 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()
。
我正在使用面向 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()
。