2016-05-16 37 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

相關問題