2017-07-11 46 views
0

我需要從async Task testWCF2函數返回值submitOut?任何人都可以提供有關如何執行此操作的指導?如何從「異步任務」函數返回值?

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; 
    } 

回答

4

您的返回類型更改爲Task<string>,因爲這樣的:

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

然後,你可以return submitOut;

一旦你返回一個值,那麼你消耗它使用await

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; 
} 

我推薦閱讀o n basics of async

+0

- 更新了我的問題了一下,它拋出一個錯誤'在行無法隱式轉換類型 'System.Threading.Tasks.Task ' 到「string'''字符串submitStatus = QlasrSubmit(siInfo);' – user3508811

+0

是否有解決方案,而不將'QlasrPostcommit'返回類型轉換爲'任務' – user3508811

+0

@ user3508811:'QlasrSubmit'現在也是異步的,所以您需要使用'await'來使用它。 –

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; 
}