gpt4 book ai didi

c# - 在控制台应用程序中调用 HttpClient.GetAsync - 死锁

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:48 33 4
gpt4 key购买 nike

我搜索并看到了很多帖子,但我不知道为什么这个使用 httpclient.getasync 并等待它的简单控制台调用会导致它无法完成。这是代码:

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
public static void Main(string[] args)
{
GetAPI().Wait();
Console.WriteLine("Hello");
//Console.ReadLine();
}

public static async Task GetAPI()
{
using (HttpClient client = new HttpClient())
{
var response = await client.GetAsync("https://www.google.com/");
//var response = client.GetAsync("https://www.google.com/").Result

string content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
}

如果我改为使用 client.GetAsync("https://www.google.com/ ").Result;并删除“等待”(请参阅​​注释掉的代码)它会起作用,但是我认为这是不行的,因为我正在将异步函数变为同步函数。我看过其他关于此的帖子和博客,它们都声称我正在尝试做的事情是正确的,但在运行示例应用程序时,结果并非如此。

最佳答案

您可以在 Main 中调用 wait()

但要小心,这只适用于控制台应用程序,并且会在 UI 应用程序(如 WPF、WinForms 或 ASP.NET 上下文中)中死锁...

public static void Main(string[] args)
{

try
{
var t = GetAPI();
t.Wait();
Console.WriteLine(t.Result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

}

public static async Task<string> GetAPI()
{
using (HttpClient client = new HttpClient())
{
var response = await client.GetAsync("https://www.google.com/");
string content = await response.Content.ReadAsStringAsync();

return content;
}
}

MSDN

This code will work just fine in a console application but willdeadlock when called from a GUI or ASP.NET context.

关于c# - 在控制台应用程序中调用 HttpClient.GetAsync - 死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49269532/

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