2015-04-17 2 views
0

Как получить результат обратно из метода async?Получить результат от метода async в Windows Phone

async Task<string> Get(string Url) 
    { 
     HttpClient httpClient = new HttpClient(); 
     httpClient.MaxResponseContentBufferSize = 10485760; 
     httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
     HttpResponseMessage response = await httpClient.GetAsync(Url); 
     return await response.Content.ReadAsStringAsync(); 
    } 

вызов метода

var a = Get(address).Result; 
Outbox.Text = a; 

при попытке получить результат, на выходе winodow я получил "Нить 0xdf4 завершился с кодом 0 (0x0)"

и ничего случилось

но я могу получить результат таким образом

async Task Get(string Url) 
    { 
     HttpClient httpClient = new HttpClient(); 
     httpClient.MaxResponseContentBufferSize = 10485760; 
     httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
     HttpResponseMessage response = await httpClient.GetAsync(Url); 
     Outbox.Text = response.Content.ReadAsStringAsync().Result; 
    } 

и вызвать метод, таким образом

var a = Get(address); 

я попробовать этот код на Windows Phone 8.1. спасибо.

ответ

1

В большинстве случаев при вызове метода асинхронного, вы должны ждать его:

var a = await Get(address); 
Outbox.Text = a; 

Вызов .Result технически действует, но вы замораживание вызывающего потока, который иногда может привести к тупика (как в вашем примере).

+0

Я попробую это раньше, оператор 'wait' может использоваться только в рамках метода async –

+0

Это просто означает, что вам нужно добавить ключевое слово 'async' в вашу подпись метода. Например, если у вас есть 'public void Button_Click (...)', измените его на 'public async void Button_Click (...)' –

+0

yup, он работает. Спасибо большое –

Смежные вопросы