gpt4 book ai didi

c# - 在 GetAsync 上使用 await 时,HttpClient 不会抛出异常

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

我正在使用以下代码获取端点并将其写入缓存:

public async Task UpdateCacheFromHttp(string Uri)
{
if (string.IsNullOrEmpty(Uri))
return;

var httpClient = new HttpClient();
var response = await httpClient.GetAsync(Uri);

if ((response != null) && (response.IsSuccessStatusCode))
{
var responseStream = await response.Content.ReadAsStreamAsync();
WriteToCache(responseStream);
}
}

代码在 IIS 上运行。

如果无法到达端点,我希望 GetAsync 抛出异常。即使使用 Try-Catch,它似乎也永远不会失败。 GetAsync 永远不会返回(我在 HttpClient 上尝试了 5 秒超时,但仍然没有返回)。

这会抛出一个异常:

public Task UpdateCacheFromHttp(string Uri)
{
var updateCacheTask = Task.Factory.StartNew(new Action(() =>
{
if (string.IsNullOrEmpty(Uri))
return;

var httpClient = new HttpClient();
var response = httpClient.GetAsync(Uri).Result;

if (response.IsSuccessStatusCode)
{
var responseStream = response.Content.ReadAsStreamAsync().Result;
WriteToCache(responseStream);
}
}));

return updateCacheTask;
}

我得到预期的“无法连接到远程服务器”。

我怀疑它与 IIS 中运行的代码有关,但为什么呢?如何让它在不需要启动新任务的情况下正确抛出异常?

最佳答案

我的直觉告诉我,您正在调用 WaitResult 进一步调用堆栈。

如果这是正确的,那么你就会造成死锁,因为 I explain on my blog .

关于c# - 在 GetAsync 上使用 await 时,HttpClient 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885460/

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