gpt4 book ai didi

c# - HttpClient.GetStringAsync 和 WebClient.DownloadStringAsync 之间的区别

转载 作者:太空狗 更新时间:2023-10-29 22:37:00 26 4
gpt4 key购买 nike

我有以下代码

static void Main(string[] args)
{
string url = "http://www.google.com";
Console.WriteLine(GetUrl(url).Result); // throws TaskCanceledException
Console.WriteLine(GetUrl2(url).Result);
}

public static Task<string> GetUrl(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}

public static Task<string> GetUrl2(string url)
{
using (var client = new WebClient())
{
return client.DownloadStringTaskAsync(url);
}
}

我正在尝试获取 url 的字符串,问题是 GetUrl 方法(使用 HttpClient 的 GetStringAsync)抛出 TaskCacelledException,但 GetUrl2 方法(使用 WebClient 的 DownloadStringTaskAsync)运行正确。这是using语句引起的吗?我错过了什么?

编辑。在此示例中,我在任务上调用 Result,因为这是一个控制台应用程序,我知道最好在事件处理程序中等待结果。

最佳答案

Is this caused due to using statement?

是的。在这两个代码示例中,您都在操作完成之前处理 底层客户端。两个代码示例都应这样更改:

public static async Task<string> GetUrlAsync(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}

public static async Task<string> GetUrl2Async(string url)
{
using (var client = new WebClient())
{
return await client.DownloadStringTaskAsync(url);
}
}

未记录异步下载在其底层客户端被处置时的行为。在您的代码使用完客户端之前,最好不要处置它们。

关于c# - HttpClient.GetStringAsync 和 WebClient.DownloadStringAsync 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571048/

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