首页 新闻 赞助 找找看

.net core 2.0中遭遇HttpClient.<FinishSendAsyncBuffered>的“A task was canceled”问题

0
悬赏园豆:100 [待解决问题]

引发这个问题的示例代码

private async Task<UserDto> Get()
{
    var response = await _client.GetAsync("").ConfigureAwait(false);
    if (response.IsSuccessStatusCode)
    {
        return await ReadAsAsync<UserDto>(response.Content);
    }
    //...
}

private async Task<T> ReadAsAsync<T>(HttpContent content)
{
    var responseString = await content.ReadAsStringAsync();
    return JsonConvert.DeserializeObject<T>(responseString);
}

异常堆栈信息

System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()

github上的相关issue:HttpClient throws unexpected TaskCanceledException when HttpClient is reused

请问如何解决?

dudu的主页 dudu | 高人七级 | 园豆:31075
提问于:2017-12-25 14:51
< >
分享
所有回答(4)
0

对HttpClient包装下,如果一旦出错则在再次获取HttpClient对象的时候重新实例化如何?

Daniel Cai | 园豆:10424 (专家六级) | 2017-12-25 15:34
0

每次都实例化一个client

诶碧司 | 园豆:1912 (小虾三级) | 2017-12-29 11:26

也是同样的问题

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2017-12-29 13:58
0

你的环境应该是linux吧,看这个问题的讨论是在linux下且HttpClientHandler长时间未请求,大概被服务端关闭后,再请求时产生的。我最近在做webApiClient库,一直关注httpclient的一些问题,但这个问题我没有遇到过。

jiulang | 园豆:437 (菜鸟二级) | 2018-02-05 14:59

是Windows

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2018-02-05 16:04
0

碰到类似的问题,请问解决了吗

hzcong | 园豆:202 (菜鸟二级) | 2019-04-16 15:29

我们现在用的是 .net core 2.2 ,没出现这个问题

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2019-04-16 17:09

@dudu: 我用3.1,出现同样问题

支持(0) 反对(0) 菜鸟吊思 | 园豆:200 (初学一级) | 2020-12-11 12:28

@菜鸟吊思: 出现这个异常是请求执行超时了

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2020-12-11 19:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册