等待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
    }
}