2016-05-16 41 views
0

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

Await Observable.Return(42)

我得到一个编译错误:

“BC36930 '等待' 要求类型“的IObservable(整型)'有一个合适的GetAwaiter方法。“

需要注意的是,我能够等待一个Task,在Await TaskEx.FromResult(42),而不是可观察到的。我用对象浏览器来检查Rx库,但没有GetAwaiter扩展方法,而Github repo包含在System.Reactive.Linq.Observable类中。有没有办法解决这个问题,或者我应该坚持Await Observable.Return(42).ToTask

回答

2

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

因此,您希望使用ToTask()将observable转换为任务,或者使用提供的XXXAsync方法之一,例如FirstAsync()

+0

是的,我可以等待,如果我转换为任务,正如我在我的问题中所述。 Rx [声明](https://blogs.msdn.microsoft.com/rxteam/2012/03/12/reactive-extensions-v2-0-beta-available-now/)Observable可以直接等待,但在我的情况下它不能,甚至没有Observable.FirstAsync - 失败,同样的错误。 – francezu13k50

+0

@ francezu13k50我已经更新了我的答案 - 这不会让你感到高兴,我很害怕... – Slugart

+0

感谢您的回答。我会继续瞄准Net 4.0,因为我需要支持Windows XP。 – francezu13k50

相关问题