gpt4 book ai didi

c# - HttpClient.PostAsJsonAsync 崩溃而不抛出异常

转载 作者:太空狗 更新时间:2023-10-29 17:57:20 28 4
gpt4 key购买 nike

我有一个带有 WebAPI Controller 的 ASP.NET MVC 应用程序,以及一个使用这些 Controller 的控制台应用程序。控制台应用程序从计划任务运行并从远程源获取数据、解析数据并在退出前将其发布到 MVC 应用程序。

这适用于多个 Controller ,但其中一个调用使控制台应用程序崩溃而没有抛出异常。用于所有 Controller 的调用者代码:

    public async Task<string> Post<T>(string urlRoot, string url, T data)
{
var result = "";
try
{
var httpClient = GetHttpClient(urlRoot);
var response = await httpClient.PostAsJsonAsync(url, data); // Exits here
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<string>();
}
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
return result;
}

程序在调用 await httpClient.PostAsJsonAsync(url, data) 时退出。使用断点,既不会到达 catch block ,也不会到达 if 语句。然而,调用正在进行,因为正在使用正确的数据调用 Web API Controller 。

对于通过 API 调用传递的 T,这些程序共享相同的代码。

从输出窗口:

The program '[9640] ProgramName.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).

我想知道发布数据的大小是否会成为问题,但我没有找到任何说明大小限制的文档。

所以我的问题是:

  1. 什么可能导致控制台应用程序过早退出?
  2. 我该如何检测并防止程序退出?

最佳答案

其中一个可能的问题是您没有await Post 方法的执行。这是我正在谈论的内容的简化版本:

    static void Main(string[] args)
{
Action testAction = async () =>
{
Console.WriteLine("In");
await Task.Delay(100);
Console.WriteLine("First delay");
await Task.Delay(100);
Console.WriteLine("Second delay");
};
testAction.Invoke();
Thread.Sleep(150);
}

testAction 将在第二个等待任务中中止,并且控制台以 0 代码退出。输出将是:

   In
First delay
Press any key to continue . . .

在我的例子中,我只是在 Main 方法的末尾添加 Console.ReadKey() 调用。在您的情况下,可能需要不同的东西

关于c# - HttpClient.PostAsJsonAsync 崩溃而不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16032708/

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