【发布时间】:2020-02-14 01:12:15
【问题描述】:
我有一个带有回调的 acync 方法:
myAsyncMethod(params) {
handleResult(it)
}
我需要将其转换为同步方法(阻止并返回结果),如下所示:
val result = mySyncMethod(params)
handleResult(result)
因为这个方法是第三方库提供的,所以无法重新实现。
我正在尝试使用 ReentrantLock:
fun mySyncMethod(params:Type) {
Log.d("tag", "1")
val result = null
val mutex = ReentrantLock()
myAsyncMethod(params) {
Log.d("tag", "3")
result = it
mutex.unlock()
}
Log.d("tag", "2")
mutex.lock()
Log.d("tag", "4")
return result
}
handleResult(mySyncMethod(params))
我等待我应该看到 1、2、3、4。但我在 handleResult 中得到 1、2、4、3 和 null。我正在尝试使用互斥锁,但结果相同。如何让它发挥作用?
附:当然我可以使用同步,但在这种情况下我必须另外使用对象变量。
【问题讨论】:
-
@Anatolii 它用于非 UI 线程。它应该阻塞线程。
-
您似乎忘记在异步方法调用之前调用
mutex.lock()。