我在一个Android应用程序中尝试Kotlin协同工作,特别是我导入的
Kotlin Coroutine Adapter for Retrofit
.
Kotlin协程适配器更改改装接口以返回
Deferred<T>
而不是
Call<T>
.
我不明白的是如何启动这个
Deferred
尤其是
CoroutineContext
我想要的。请考虑以下代码:
class MyViewModel @Inject constructor(
private val foo: Foo,
@Named("ui") private val uiContext: CoroutineContext,
@Named("network") private val networkContext: CoroutineContext
) : ViewModel() {
fun performSomeJob(param: String) {
launch(uiContext) {
try {
val response = foo.bar(param).await()
myTextView.setText(response.name)
} catch (error: Throwable) {
Log.e(error)
}
}
}
在哪里?
foo.bar(param)
回报
Deferred<SomeModel>
.
这段代码有效,但我不确定
协同文本
这
食物棒(参数)
正在执行(
CommonPool
??).
如何明确指定
食物棒(参数)
在一个
networkContext
?
val response = async(networkContext) { foo.bar(param) }.await()
这段代码不起作用,因为
response
被评估为
推迟<SomeModel>
而不是
SomeModel
(我想实现)。