У меня есть метод acyn c с обратным вызовом:
myAsyncMethod(params) {
handleResult(it)
}
Мне нужно преобразовать его в метод syn c (блокировать и вернуть результат) следующим образом:
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. Но я получаю 1, 2, 4, 3 и ноль в handleResult. Я пытаюсь сделать то же самое с мьютексом, но с тем же результатом. Как заставить это работать?
PS Конечно, я могу использовать синхронизированный, но в этом случае я должен использовать переменную объекта дополнительно.