ale*_*ini 4 future kotlin-coroutines
将Java 7期货包装到kotlin暂停函数中的最佳方法是什么?有没有一种方法可以将将Java 7期货返回的方法转换为挂起函数?
对于任意回调或Java 8 completablefutures,该过程非常简单,例如此处所示:* https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md#suspending-functions
在这些情况下,将来完成时会触发一个钩子,因此一旦将来值准备好(或触发了异常),就可以使用它来恢复继续。
但是,Java 7期货不会公开在计算结束时调用的方法。
在我的代码库中,无法将Java 7 future转换为Java 8 Completable Future。
当然,我可以创建一个调用future.get()的暂停函数,但这会被阻塞,这破坏了使用协程暂停的总体目的。
另一种选择是将可运行对象提交给新的线程执行器,然后在可运行调用内部future.get()并调用回调。从使用者的角度来看,该包装器将使代码看起来像“非阻塞”,协程可以挂起,但是在后台,我们仍在编写阻塞代码,并且我们只是为了阻塞它而创建了一个新线程。
Java 7的前途一片光明。它不是为异步API设计的,并且不提供任何安装将来完成时调用的回调的方法。这意味着没有直接使用suspendCoroutine它的方法,因为它suspendCoroutine是设计用于与使用异步回调的API一起使用的。
但是,如果实际上您的代码是在JDK 8或更高版本下运行的,则代码中包含的实际Future实例很有可能在CompletionStage运行时实现接口。您可以尝试将其转换为库模块的CompletionStage现成可用CompletionStage.await扩展名。kotlinx-coroutines-jdk8kotlinx.coroutines
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |