gpt4 book ai didi

c# - HttpClient GetStringAsync - 它永远不会回来

转载 作者:太空狗 更新时间:2023-10-29 22:33:41 25 4
gpt4 key购买 nike

新的 ASP.NET Web API HttpClient 一直给我一些奇怪的结果。这是我的代码:

class Program {

static async void Main(string[] args) {

var address = "http://localhost:3895/api/urls";

Console.WriteLine(await getStringAsync(address));
Console.ReadLine();

}

public static async Task<string> getStringAsync(string uri) {

var httpClient = new HttpClient();
return await httpClient.GetStringAsync(uri);
}
}

这永远不会回来,控制台突然出现又消失。当我如下更改代码时,它按预期工作:

static void Main(string[] args) {

var address = "http://localhost:3895/api/urls";

Console.WriteLine(getString(address));
Console.ReadLine();

}

public static string getString(string uri) {

var httpClient = new HttpClient();

return httpClient.GetStringAsync(uri).Result;
}

知道会出现什么问题吗?

最佳答案

async on Main 在 VS11/.NET 4.5 编译器中是不允许的,因此我假设您使用的是 Async CTP。如果完全可以选择使用 .NET 4.5,请务必进行转换。

除此之外,它不起作用的原因是因为 async,或更一般地说,任务依赖于能够以某种方式发出信号以执行其余代码。它适用于 .Result,因为代码同步运行,所以问题不适用。

没有对控制台应用程序的内置支持,因为它们通常不像 WinForms 那样使用消息循环,但您可以查看 Microsoft Visual Studio Async CTP\Samples\(C#测试)单元测试\AsyncTestUtilities,特别是 GeneralThreadAffineContext.cs,以获取也适用于控制台应用程序的基本示例。

关于c# - HttpClient GetStringAsync - 它永远不会回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878270/

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