2015-04-17 59 views
0

如何從異步方法獲取結果?從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)退出」

並沒有什麼happend

但我可以通過這種方式得到結果

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

我之前試過這個,'await'操作符只能在異步方法中使用 –

+0

這就意味着你需要在你的方法簽名中添加'async'關鍵字。例如,如果你有'public void Button_Click(...)',把它改爲'public async void Button_Click(...)' –

+0

yup,它可以工作。非常感謝 –

相關問題