Vb.net 使用Microsoft.Bcl.Async在Net 4.0中等待观察
我正在使用Microsoft Visual Studio Comunity 2015,目标是Net 4.0。我已经通过Nuget安装了以下内容:Rx Main 2.2.5、Microsoft.Bcl.Async 1.0.168。我需要等待一个可观察的,但当我写Vb.net 使用Microsoft.Bcl.Async在Net 4.0中等待观察,vb.net,async-await,system.reactive,visual-studio-2015,Vb.net,Async Await,System.reactive,Visual Studio 2015,我正在使用Microsoft Visual Studio Comunity 2015,目标是Net 4.0。我已经通过Nuget安装了以下内容:Rx Main 2.2.5、Microsoft.Bcl.Async 1.0.168。我需要等待一个可观察的,但当我写 等待观察。返回(42) 我得到一个编译器错误: “BC36930‘Await’要求类型‘IObservable(of Integer)’具有合适的GetAwaiter方法。” 请注意,我可以等待任务,如等待TaskEx.FromResul
等待观察。返回(42)
我得到一个编译器错误:
“BC36930‘Await’要求类型‘IObservable(of Integer)’具有合适的GetAwaiter方法。”
请注意,我可以等待
任务
,如等待TaskEx.FromResult(42)
,但不能观察到。我已经使用对象浏览器来检查Rx库,但并没有GetWaiter扩展方法,而它确实包含在System.Reactive.Linq.Observable类中。有没有办法解决这个问题,或者我应该坚持使用wait Observable.Return(42).ToTask
?不幸的是,当您以.NET 4.5及以上版本为目标时,getwaiter和INotifyCompletion的实现才被编译到Rx中。在源代码中查看这一点
在这种情况下,您希望使用
ToTask()
将可观察到的内容转换为任务,或者使用提供的XXXAsync方法之一,例如FirstAsync()
。不幸的是,当您以.NET 4.5及更高版本为目标时,GetWaiter和INotifyCompletion的实现仅编译为Rx。在源代码中查看这一点
在这种情况下,您希望使用
ToTask()
将可观察对象转换为任务,或者使用提供的XXXAsync方法之一,例如FirstAsync()
。是的,如我在问题中所述,如果我转换为任务,我可以等待。可以直接等待可观察的Rx,但在我的情况下,它不能,甚至不可观察。FirstAsync-它失败,并出现相同的错误。@francezu13k50我已经更新了我的答案-恐怕这不会让你高兴…谢谢你的回答。我会继续以NET4.0为目标,因为我需要支持WindowsXP。但是,你现在真的不应该使用MS BCL异步目标包。目标包应仅用于针对.net 4.0。但是,截至2016年1月12日,Microsoft已放弃对.net 4.0的支持。@francezu13k50您的客户正在为Microsoft提供的扩展支持付费,对吗?如果是这样的话,请投入到这数百万美元中,并要求对.net 4.0的支持进行适当的补充。是的,如我在问题中所述,如果我转换为任务,我可以等待。可以直接等待可观察的Rx,但在我的情况下,它不能,甚至不可观察。FirstAsync-它失败,并出现相同的错误。@francezu13k50我已经更新了我的答案-恐怕这不会让你高兴…谢谢你的回答。我会继续以NET4.0为目标,因为我需要支持WindowsXP。但是,你现在真的不应该使用MS BCL异步目标包。目标包应仅用于针对.net 4.0。但是,截至2016年1月12日,Microsoft已放弃对.net 4.0的支持。@francezu13k50您的客户正在为Microsoft提供的扩展支持付费,对吗?如果是这样的话,那就加入到这数百万人的行列中,并要求对.NET4.0的支持进行适当的补充。