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

我正在使用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 项目中复制这个问题,但问题仍然存在。


堆栈跟踪如下。底部有一个异常,但即使在这个异常之后,程序也不会退出/将控制权交还给调试器。


慕尼黑5688855
浏览 212回答 1
1回答

达令说

根据异步客户端的实现方式,它可以在一个线程/协程中抛出错误,然后等待完成消息或在其代码的另一部分触发。因为错误被抛出,触发器永远不会被发送,因此线程永远挂起。我曾经“构建”过这样的问题,所以是的,这是可能的。显然,我不知道这是否真的是手头的问题。干杯,一切顺利!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java