2017-07-11 47 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; 
}