为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 AsyncHttpClient 在抛出异常后不关闭线程?

为什么 AsyncHttpClient 在抛出异常后不关闭线程?

慕尼黑5688855 2023-06-14 11:13:22
我正在使用Zendesk Java 客户端。当我提供正确的凭据时,它会按预期工作。但是,我偶然发现了一个场景,如果传入了错误的凭据,线程就会挂起并引发错误。无论我在有或没有调试器的情况下运行代码,代码都会保持运行状态。它不会退出或将控制返回给调试器。这是图书馆的问题,还是我误解了 AsyncHttpClient 的工作原理?我的代码如下:fun zdtestWrongCredentials() {    val client = asyncHttpClient(        config()            .setRequestTimeout(5000)            .setReadTimeout(5000)            .setShutdownTimeout(3000)            .setPooledConnectionIdleTimeout(5000)            .setKeepAlive(false)    )    var zd = Zendesk.Builder("https://website.zendesk.com")        .setClient(client)        .setUsername("john.doe@website.com")        .setPassword("abcd")        .build()    var ticket = Ticket(123, "a", Comment("abc"))    // The code hangs here. It's unclear why it exhibits this behavior.    var test = zd.createTicket(ticket)    // The code does not reach this line.    client.close()    return}虽然我使用的是 Kotlin,但我尝试在一个简单的 Java 项目中复制这个问题,但问题仍然存在。堆栈跟踪如下。底部有一个异常,但即使在这个异常之后,程序也不会退出/将控制权交还给调试器。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

根据异步客户端的实现方式,它可以在一个线程/协程中抛出错误,然后等待完成消息或在其代码的另一部分触发。

因为错误被抛出,触发器永远不会被发送,因此线程永远挂起。

我曾经“构建”过这样的问题,所以是的,这是可能的。

显然,我不知道这是否真的是手头的问题。

干杯,一切顺利!


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信