繁体   English   中英

HttpClient.GetAsync立即抛出TaskCanceledException

[英]HttpClient.GetAsync immediately throws TaskCanceledException

我有一个工作代码从我的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);
    }
}

它运作良好,我很高兴。 直到我决定从另一个类的视图中移动我的代码,这应该包含整个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完成之前处理。 使用第一个表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM