如何在kotlin jvm控制台应用程序中异步使用fuel

如何在kotlin jvm控制台应用程序中异步使用fuel,kotlin,jvm,Kotlin,Jvm,我试图使用Fuel库异步调用一些web服务,但应用程序进程在处理完成之前退出。 使用sleep延迟退出是愚蠢的,但我找不到更好的方法。大多数示例显示servlet或android应用程序中的燃料使用情况 下面是一个示例。我使用reqres模拟了一个长时间运行的服务调用 import com.github.kittinunf.fuel.core.FuelManager import com.github.kittinunf.fuel.httpGet fun main(ar

我试图使用Fuel库异步调用一些web服务,但应用程序进程在处理完成之前退出。 使用
sleep
延迟退出是愚蠢的,但我找不到更好的方法。大多数示例显示servlet或android应用程序中的燃料使用情况

下面是一个示例。我使用reqres模拟了一个长时间运行的服务调用

    import com.github.kittinunf.fuel.core.FuelManager
    import com.github.kittinunf.fuel.httpGet

    fun main(args: Array<String>) {
        FuelManager.instance.baseHeaders = mapOf(
                "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"
        )

        "https://reqres.in/api/users?delay=3".httpGet().responseString { _, _, result ->
            result.fold(
                    { str ->
                        println("success")
                    },
                    { fuelError ->
                        println("got error: $fuelError")
                    })
        }
        Thread.sleep(5_000)
        println("main finishes")
    }
导入com.github.kittinunf.fuel.core.FuelManager
导入com.github.kittinunf.fuel.httpGet
趣味主线(args:Array){
FuelManager.instance.baseHeaders=mapOf(
“用户代理”至“Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:60.0)Gecko/20100101 Firefox/60.0”
)
"https://reqres.in/api/users?delay=3“.httpGet().responseString{},{,结果->
结果:折叠(
{str->
println(“成功”)
},
{fuelError->
println(“获取错误:$fuelError”)
})
}
线程。睡眠(5_000)
println(“主要饰面”)
}

我应该研究一下协同程序式的燃料使用方式,还是有更简单的方法?

也许你应该重新考虑你的解决方案,如果你的应用程序只需要调用api,是否需要使用异步方法?异步编程通常用于执行一些操作,这些操作可能需要一段时间,而不会阻塞应用程序的主流。所以,从逻辑上讲,如果你的应用程序在该操作完成之前退出,就不需要结果。确实可以在没有lambdas的情况下以阻塞方式重写应用程序。但在实际情况中,会涉及到一些繁重的递归处理,函数式fuel代码更容易理解。正如我所说的,如果您启动异步计算,但您的应用程序在计算完成之前退出,则不需要结果,例如,让我们假设您打开某个网站,它使用异步API调用来获取一些数据的列表,如果您在收到数据之前退出,则不需要它,在您的情况下也会发生同样的情况,在异步调用之后您什么都不做,所以应用程序只是简单地退出,一方面是为了避免您需要在某个地方引入阻塞调用,另一方面是为了让它等待异步操作完成“按CTRL-C退出…”System.out上的消息,如果要使用异步代码,请使用
System.in.read()
阻止主线程。完成后,只需使用
System.exit()
退出程序。