我想在.NET 4中等待任務結果,就像在.NET 4.5中使用await關鍵字一樣。我只是無法弄清楚如何做到這一點,但....NET 4中的非阻塞Task.wait?
我的代碼(證明我ATLEAST想):
Private Function GetXDocumentFromWebLocationAsync(ByVal request As WebRequest) As XDocument
Dim queryTask As Task(Of WebResponse)
queryTask = task(Of WebResponse).Factory.FromAsync(AddressOf request.BeginGetResponse, AddressOf request.EndGetResponse, Nothing, Nothing)
Return XDocument.Load(queryTask.Result.GetResponseStream)
End Function
正如你所期望的,GetResponse的調用執行上一個不同的線程,但函數必須等待結果才能返回。不幸的是,這阻止了我的主線程,直到任務完成,並且我沒有絲毫思考如何讓它等待而沒有阻塞。我不想使用異步CTP,因爲這只是遠離問題。
什麼是祕密醬?
'異步CTP ...只是遠離問題。'我想說異步CTP「解決」了這個問題。對於他自己的,我猜... –
排序,但CTP更像是.NET 4.5將帶來的預覽。不是你在生產代碼中使用的東西。而且,由於它建立在任務API上,所以應該可以做到沒有,對吧? –
好吧,我已經在生產代碼中使用了它很長一段時間,但我也有一個非常有限的用戶羣。 :) CTP實際上更像是VS11編譯器的預覽版;如果需要,可以使用VS11 Beta和「.NET 4異步定位包」來開發.NET 4解決方案。它建立在任務上 - 有點 - 但要做一個確切的重複[是很多工作](http://msmvps.com/blogs/jon_skeet/archive/tags/Eduasync/default.aspx)。 –