gpt4 book ai didi

c# - HttpClient.GetAsync 立即抛出 TaskCanceledException

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:52 25 4
gpt4 key购买 nike

我有一个工作代码从我的 CommonRestClient 返回一些东西(它是 HttpClient 的简单包装器):

public async Task<IActionResult> Index()
{
var uri = _baseUri.Concat(AvalancheServiceAdresses.NodeService);
using (var client = new CommonRestClient(uri))
{
var result = await client.GetAsync<List<NodeInfoContract>>(new Uri(NodeServiceConstant.NodesContractUrl, UriKind.Relative), null);
return View(result);
}
}

它运行良好,我很高兴。直到我决定将我的代码从 View 中移到另一个类中,该类应该封装整个 REST 逻辑并提供 OOP API。

所以现在我的索引看起来像:

public async Task<IActionResult> Index()
{
var nodeInfoContracts = await _configManager.GetNodesList();
return View(nodeInfoContracts);
}

GetNodesList 在哪里

public ConfiguredTaskAwaitable<List<NodeInfoContract>> GetNodesList()
{
var uri = _baseUri.Concat(AvalancheServiceAdresses.NodeService);
using (var client = new CommonRestClient(uri))
{
return client.GetAsync<List<NodeInfoContract>>(new Uri(NodeServiceConstant.NodesContractUrl, UriKind.Relative), null);
}
}

很明显,提供的代码是相等的。

但现在当我尝试获取结果时它总是抛出异常。在我的 GetAsync 方法中,它在以下行中失败并显示 TaskCanceledException:

var response = await _client.GetAsync(url).ConfigureAwait(false);

但这很有趣:当我在此行上放置一个断点并跨过它时,它工作正常。所以这里我们有竞争条件或类似条件。

为什么我得到它?我尝试将 CondigureAwait 设置为 false/true,结合一些代码,但当断点关闭时它总是会抛出错误。我检查了几分钟的超时,它不会导致这个错误。

最佳答案

在第二个代码片段中,客户端在 IO 完成之前被释放。使用第一种形式。

关于c# - HttpClient.GetAsync 立即抛出 TaskCanceledException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547220/

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