如何从`async Task`函数返回值?

时间:2017-07-11 20:31:15

标签: asp.net wcf async-await

我需要从下面的submitOut函数返回值async Task testWCF2吗?有人可以提供有关如何操作的指导吗?

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

2 个答案:

答案 0 :(得分:5)

将您的退货类型更改为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;
}

我建议您阅读basics of async

答案 1 :(得分: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;
}