gpt4 book ai didi

c# - 为什么 HttpClient.PostAsync() 没有在控制台应用程序中完成,但在 Web 应用程序中完成?

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:56 24 4
gpt4 key购买 nike

我在控制台应用程序中使用了以下代码,直到我使用 Console.Read(); 后调用才完成;最后或 client.PostAsync("api/xxx", contentPost).wait()。但在 Web 应用程序中,我不必使用任何 wait() 方法。我不想使用 wait() 方法。有人可以帮我解决这个问题吗。

   static void Main(string[] args)
{
CreateLog();

}
private static void CreateLog()
{

for(int i=0;i<100;i++)
ProcessLog(new LogMessage() {
});
Console.Write("Press Enter to exit");
Console.ReadLine();

}
private static void ProcessLog(LogMessage message)
{


//Post message to web service
HttpClient client = new HttpClient();
// ConfigurationSettings.GetConfig("web api")
client.BaseAddress = new Uri(@"web api url");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent contentPost = new StringContent(JsonConvert.SerializeObject(message), Encoding.UTF8, "application/json");
client.PostAsync("api/xxx", contentPost);
}

最佳答案

这是 race condition 的经典示例.您指望它在控制台应用程序完成之前完成,但不能保证(除非明确等待)它会实际发生。事实上,使用您发布的代码,您将几乎肯定有许多调用在您到达 Console.Write() 调用时尚未完成。

这里的不同之处在于,您的控制台应用程序将在您按下某个键进入后立即终止。 Console.Read() 用作 事实上 Wait() 调用,但绝对不能保证用户实际上会等待足够长的时间让所有调用完成。 Web 应用程序的生命周期与控制台应用程序完全不同,因此它们不一定会在您完成调用后立即关闭。

在退出之前,您必须有某种方式来等待所有调用完成。

关于c# - 为什么 HttpClient.PostAsync() 没有在控制台应用程序中完成,但在 Web 应用程序中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666285/

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