В настоящее время я играю с WPF 4.5 и Visual Studio 11 Developer Preview. Я использую async-await для асинхронного выполнения http-запросов в обработчике событий приложения. Проблема в том, что при первом вызове метода await-способны поток приложения зависает до его завершения. Все последующие вызовы в порядке, т. Е. Пока они выполняются, приложение остается работоспособным.
Вот мой код (только значимые выдержки):
XAML
<toolkit:AutoCompleteBox FilterMode="None"
Margin="5,0,5,0"
x:Name="textArrival"
Populating="textArrival_Populating"
SelectionChanged="textArrival_SelectionChanged"/>
C # код-позади:
private async void textArrival_Populating(object sender, PopulatingEventArgs e)
{
e.Cancel = true;
textDeparture.ItemsSource = await model.ProcessStationRequest(textArrival.Text);
textArrival.PopulateComplete();
}
ожидаемый источник вызовов из предыдущего фрагмента кода:
public async Task<object[]> ProcessStationRequest(string request)
{
// omitted: preparing the request into MemoryStream outputStream
// ...
HttpResponseMessage response = await httpClient.PostAsync(hostName, outputStream);
// omitted: parsing the XML response to an object responseContainer
// and returning its member Items, which are of type object[]
//...
return responseContainer.Items;
}
Когда я отлаживаю и устанавливаю точку останова сразу после строки ... жду httpClient.PostAsync ..., я вижу, что это действительно тот вызов, который зависает в моем приложении во время обработки запроса (около 2 секунд). Но если я помещаю свою точку останова прямо в строку с ожидаемым вызовом, это происходит сразу после того, как заполнение текстового поля автозаполнения запущено. Между ними нет ничего, по крайней мере, в моем коде, поэтому я предполагаю, что ожидающий вызов httpClient заставляет мое приложение зависать.
Можете ли вы указать какую-то проблему в этом коде, которая вызывает такое странное поведение?