gpt4 book ai didi

c# - 在 C# : Remove Task. Wait() 中使用 Web 服务

转载 作者:行者123 更新时间:2023-12-01 21:27:46 24 4
gpt4 key购买 nike

我正在尝试使用网络服务。它是一种基于 XML 的服务。我的意思是 XML 格式的响应。代码工作正常。但是,我不想使用 task.Wait()。请告诉我如何用 async/await 替换它。

下面是我的代码:

using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
Program obj = new Program();
var result = obj.GetData().Result;
}

public async Task<string> GetData()
{
string url =
"https://test.net/info.php?akey=abcd&skey=xyz";
HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAsync(url).Result;
var responseValue = string.Empty;
if (response != null)
{


Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
});

task.Wait(); // How I can replace it and use await


}

return responseValue;
}
}

[XmlRoot(ElementName = "Info")]
public class Test
{
[XmlAttribute(AttributeName = "att")]
public string SomeAttribute{ get; set; }
[XmlText]
public string SomeText{ get; set; }
}

最佳答案

您已经处于async 上下文中,因此只需使用await:

var stream = await response.Content.ReadAsStreamAsync();

using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}

也就是说,您应该检查所有电话:

HttpResponseMessage response = await client.GetAsync(url);

并让你的 main 异步,当我们这样做时让方法静态:

public static async Task Main)
{
var result = await GetData();
}

你的方法签名在哪里:

public static async Task<string> GetData()

static 不是必需的,但如果副作用尽可能小,您会发现并行和/或异步编程会容易得多。

关于c# - 在 C# : Remove Task. Wait() 中使用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com