2016-09-13 2 views
-1

Я пытаюсь прочитать URL-адрес формы xml.
это мой код:C# windowphone 8.1 код с задачей async

static XDocument GetXml(string url) 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      var response = client.GetStreamAsync(url); 
      return XDocument.Load(response.Result); 
     } 
    } 

и я читал XML, как это:

public object DeteailsEmp(string emp_xml, string emp_error) 
    { 
     XDocument xml; 
     try 
     { 
      xml = XDocument.Parse(GetXml(emp_xml).ToString()); 
     } 
     catch 
     { 
      xml = XDocument.Load(emp_error); 
     } 
     var detail = from query in xml.Descendants("emp") 
         select new Data.Emp 
         { 
          Name = (string)query.Element("name").Value, 
          Age = (string)query.Element("age").Value, 
     return detail ; 
    } 

с этим кодом, все в порядке.
, но, когда я изменить код для асинхронной задачи, как это:

async static Task<XDocument> GetXml(string url) 
    { 
     using (HttpClient client = new HttpClient()) 
     { 
      var response = await client.GetStreamAsync(url); 
      return XDocument.Load(response); 
     } 
    } 

я не могу читать XML с этим кодом.
как исправить?

+0

Что вы имеете в виду не умеет читать xml? Вы встречаете исключение? Если да, отправьте его. Как выглядит ваш DetailsEmp, когда вы конвертируете его в асинхронный метод? –

+0

Во втором случае, когда вы терпите неудачу, вы используете ответ, в то время как первый случай вы используете response.Result(). – jdweng

+0

@jdweng: потому что если я использую response.Result(), он не может найти Result() – 1234abcd

ответ

0

Раньше я ленив и не читал вопрос правильно. лол.

Вы забыли назвать ждать от способа DeteailsEmp (Также он должен быть преобразован в асинхронном)

Зов это следующим образом:

object obj = await DeteailsEmp(param1, param2); // Proper call using await 

или

object obj = DeteailsEmp(param1, param2).Result; // Force result 



public async Task<object> DeteailsEmp(string emp_xml, string emp_error) 
{ 
    XDocument xml; 
    try 
    { 
     xml = XDocument.Parse((await GetXml(emp_xml)).ToString()); // Since GetXml is now an asynchronous method, you need to get the result first before calling ToString() or you can use GetXml(emp_xml).Result.ToString() 
    } 
    catch 
    { 
     xml = XDocument.Load(emp_error); 
    } 
    var detail = from query in xml.Descendants("emp") 
        select new Data.Emp 
        { 
         Name = (string)query.Element("name").Value, 
         Age = (string)query.Element("age").Value, 
    return detail ; 
} 

async static Task<XDocument> GetXml(string url) 
{ 
    using (HttpClient client = new HttpClient()) 
    { 
     var response = await client.GetStreamAsync(url); 
     return XDocument.Load(response); 
    } 
} 
+0

Большое вам спасибо – 1234abcd

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