2017-07-11 4 views
0

Ich muss den Wert submitOut von async Task testWCF2 Funktion unten liefern? Kann jemand Anleitung geben, wie es geht?Wie gebe ich Werte von einer `async Task'-Funktion zurück?

public static async Task testWCF2(string xmlConfig) 
    { 
     string submitOut; 

     using (var client = new System.Net.Http.HttpClient()) 
     { 
      var url = "http://server:8100/api/SoftwareProductBuild"; 
      var content = new StringContent(xmlConfig, Encoding.UTF8, "application/xml"); 
      var response = await client.PostAsync(url, content); 
      if (response.IsSuccessStatusCode) 
      { 
       var responseBody = await response.Content.ReadAsStringAsync(); 
       submitOut = responseBody; 
      } 
      else 
      { 
       submitOut = string.Format("Bad Response {0} \n", response.StatusCode.ToString()); 
       submitOut = submitOut + response; 
      } 
     } 
    } 

    public string QlasrSubmit(List<XMLSiInfo> xmlConfigs) 
    { 
     string submitOut = "QLASR: "; 

     foreach (XMLSiInfo xmlConfig in xmlConfigs) 
     { 
      submitOut = submitOut + "\n" + testWCF2(xmlConfig.xml).ToString(); 
     } 

     return submitOut; 
    } 

    public string QlasrPostcommit(string si, string sp, string variant = null) 
    { 
     ............. 
     string submitStatus   = QlasrSubmit(siInfo); 
     .... 
     return submitStatus; 
    } 

Antwort

4

Ändern Sie Ihre Rückkehr Typ Task<string>, als solche:

public static async Task<string> testWCF2(string xmlConfig) 

Dann können Sie einfach return submitOut;

Sobald Sie einen Wert zurückgeben, dann verbrauchen Sie es await mit:

public async Task<string> QlasrSubmit(List<XMLSiInfo> xmlConfigs) 
{ 
    string submitOut = "QLASR: "; 

    foreach (XMLSiInfo xmlConfig in xmlConfigs) 
    { 
    submitOut = submitOut + "\n" + await testWCF2(xmlConfig.xml); 
    } 

    return submitOut; 
} 

Ich empfehle das Lesen o n basics of async.

+0

- Aktualisiert meine Frage ein wenig, wirft er einen Fehler 'kann nicht implizit konvertiert Typ 'System.Threading.Tasks.Task ' auf‚string'' in Zeile 'String submitStatus = QlasrSubmit (siInfo);' – user3508811

+0

Gibt es eine Lösung, ohne den 'QlasrPostcommit' Rückgabetyp in' Task ' – user3508811

+0

@ user3508811 zu konvertieren:' QlasrSubmit' ist jetzt auch asynchron, also musst du es mit 'await' konsumieren. –

3
public static async Task<string> testWCF2(string xmlConfig) 
{ 
    string submitOut; 

    using (var client = new System.Net.Http.HttpClient()) 
    { 
     var url = "http://server:8100/api/SoftwareProductBuild"; 
     var content = new StringContent(xmlConfig, Encoding.UTF8, "application/xml"); 
     var response = await client.PostAsync(url, content); 
     if (response.IsSuccessStatusCode) 
     { 
      var responseBody = await response.Content.ReadAsStringAsync(); 
      submitOut = responseBody; 
     } 
     else 
     { 
      submitOut = string.Format("Bad Response {0} \n", response.StatusCode.ToString()); 
      submitOut = submitOut + response; 
     } 
    } 

    return submitOut; 
} 
Verwandte Themen