等待Kotlin协程在Java中的结果
我想将所有等待Kotlin协程在Java中的结果,java,kotlin-coroutines,Java,Kotlin Coroutines,我想将所有AsyncTask重写为Kotlin协同程序。在Javacode中调用并等待来自Coroutines的结果。 例如:我在Kotlin中有一些长时间消耗方法 科特林: class Coroutines { suspend fun readFile(): String { return GlobalScope.async { read long file... }.await() } } 现在,我想等待(但
AsyncTask
重写为Kotlin协同程序
。在Java
code中调用并等待来自Coroutines
的结果。
例如:我在Kotlin
中有一些长时间消耗方法
科特林:
class Coroutines {
suspend fun readFile(): String {
return GlobalScope.async {
read long file...
}.await()
}
}
现在,我想等待(但没有块UI线程)完整的方法,理想情况下没有回调
爪哇:
基本上,只能从另一个挂起函数或从协同路由生成器(如async或launch)调用协同路由挂起函数。 因为java不支持协同程序,所以不能从java代码启动它 但两者的混合是可能的,例如,您可以创建一个包含实时数据的viewmodel,该数据从从从viewModelScope启动的协同程序中更新。结果或进展可在活动/片段中观察到
希望这对您有所帮助。可能不可能。您需要阻止或使用回调。Java没有协程。是否等待结果而不是阻塞?你不能两者兼得。
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Coroutines c = new Coroutines();
c.readFile(); //Wait for result but no block UI thread
}
}