Я пытаюсь дождаться результата задачи в .NET 4, как вы можете, используя ключевое слово await в .NET 4.5. Я просто не могу понять, как это сделать, хотя ...Неблокирующий Task.wait в .NET 4?
Моего кода (чтобы доказать, что я по крайней мере пытаюсь):
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 выполняются на другой поток, но функция должна ждать результата, прежде чем он сможет вернуться. К сожалению, это блокирует мой основной поток, пока задача не завершится, и я не имею ни малейшего понятия о том, как заставить ее ждать, не блокируя. Я не хочу использовать Async CTP, потому что это просто убегает от проблемы.
Что такое секретный соус?
'Async CTP ... просто убегает от проблемы.' Я бы сказал, что Async CTP «решает» проблему. Кажется, каждый из его собственных ... –
Сортировка, но CTP больше похож на предварительный просмотр того, что принесет .NET 4.5. Не то, что вы используете в производственном коде. А поскольку он основывается на API-интерфейсах задач, с ним можно обойтись, не так ли? –
Ну, я использую его в производственном коде довольно долгое время, но у меня также очень ограниченная база пользователей. :) CTP действительно больше представляет собой предварительный просмотр компиляторов VS11; вы могли бы использовать бета-версию VS11 вместе с «.NET-асинхронным таргетингом», чтобы разработать решение .NET 4, если хотите. Он основывается на задачах - вроде - но делать точный дубликат [много работы] (http://msmvps.com/blogs/jon_skeet/archive/tags/Eduasync/default.aspx). –