2013-10-01 75 views
-2

我以爲我可以直接做,但也許我的設置有問題?我試圖下載一個字符串在我的應用程序中記錄:我不能簡單地等待GetStringAsync?

 private async void DoLogin() 
     { 
      HttpClient client = new HttpClient(); 
      string response = await client.GetStringAsync(Config.SERVER_URL + "/Login/"); 

所有的邏輯被刪除,我去添加標題等,但VS2012不會讓我等待該響應。

我試着按照代碼from here,但在我的情況下,我只得到Cannot await 'System.Threading.Tasks.Task<string'

這是爲什麼? Should'nt GetStringAsync只是返回一個字符串?它返回一個Task<string>,但是我必須將其包裝在一個方法中嗎?

+2

你是什麼意思「不允許我等待那個迴應」? – thumbmunkeys

+1

你正在收到什麼錯誤信息?另外,'async void'方法是一個非常糟糕的主意,除非你被迫使用它們,因爲這個方法是一個事件處理程序。該方法幾乎肯定會返回至少'Task'。 – Servy

+0

我的DoLogin函數的意圖是檢查用戶憑證agains/Login /,它返回一個JSON字符串,表明憑證是否有效。我需要解析響應並查看它包含的內容......例如,如果它確定,那麼生病導航用戶到主菜單。這是一個Windows Phone項目btw – Jason94

回答

4

您的代碼非常好。但是:爲了在portable class libaries中使用async/await,您需要將NuGet包Microsoft.Bcl.Async添加到您的項目中。

另外請注意Servy使用返回類型Task而不是void的評論。