如何在Windows 10中的c#中的异步方法中从返回的任务中提取数据

如何从下面的foreach循环中的getResponseFromUrl的返回值中提取数据:这里我无法从返回的值中提取数据。 我正在windows 10通用应用程序开发中构建一个应用程序。

 var response = NetworkingCalls.getResponseFromUrl(url, requestDictionary); foreach (KeyValuePair item in response) { Util.debugLog(item.Key.ToString(), item.Value.ToString()); } 

这是返回字典的模型代码

 using System; using System.Collections.Generic; using System.Threading.Tasks; using Windows.Storage.Streams; using Windows.Web.Http; namespace App2.WrittenLibraries { class NetworkingCalls { public async static Task<Dictionary> getResponseFromUrl(string urlString, Dictionary requestDictionary) { var client = new HttpClient(); Uri url = new Uri(urlString); var requestToSend = JSONParser.getJsonString(requestDictionary); HttpResponseMessage response = await client.PostAsync(url, new HttpStringContent(requestToSend, UnicodeEncoding.Utf8, "application/json")); if (response.IsSuccessStatusCode) { try { var responseString = await response.Content.ReadAsStringAsync(); client.Dispose(); return JSONParser.getDictionary(responseString); } catch (Exception ex) { client.Dispose(); return new Dictionary(); } } else { client.Dispose(); return new Dictionary(); } } } } 

您需要在async方法中await任务:

 async Task FooAsync() { var response = await NetworkingCalls.getResponseFromUrl(url, requestDictionary); foreach (KeyValuePair item in response) { Util.debugLog(item.Key.ToString(), item.Value.ToString()); } } 

如果你的方法不能async你可以通过task.Resulttask.GetAwaiter().GetResult()得到结果,但这应该是最后的手段,因为它同步阻塞调用线程而不是异步等待:

 void Foo() { var response = NetworkingCalls. getResponseFromUrl(url, requestDictionary). GetAwaiter(). GetResult(); foreach (KeyValuePair item in response) { Util.debugLog(item.Key.ToString(), item.Value.ToString()); } }