【发布时间】:2018-08-22 11:57:01
【问题描述】:
我搜索并看到了很多帖子,但我不知道为什么这个简单的控制台调用使用 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;并删除“等待”(请参阅注释掉的代码)它会起作用,但是我相信这是不可以的,因为我正在将异步函数转换为同步函数。我看过其他关于此的帖子和博客,它们都声称我正在尝试做的事情是正确的,但是在运行示例应用程序时,结果却并非如此。
【问题讨论】:
-
这可能是一个死锁问题,但我试图通过在 GetAPI 调用中不调用 .Result 来避免它。我正在尝试使用 async 和 await 来防止死锁。我只在控制台程序的 main 函数中使用了 wait() ,它需要阻止以防止程序退出。您链接的其他线程都在调用 Result ,这是我避免的。
-
这个应用程序不应该死锁(我什至试过了——它不适合我)。
标签: c# .net async-await dotnet-httpclient