Ниже приведен мой пример использования. У меня есть функция fun requestFocus
эта функция, в свою очередь, вызывает функцию fun configure
, которая зависит от обратного вызова из системы, следовательно, эта функция configure использует coundownlatch со счетчиком 1 и ожидает до тех пор, пока не будет сброшен в ноль при получении обратного вызова , Для этого я пометил requestFocus
suspend и использую Dispatchers.IO для выполнения всех операций. Теперь есть несколько абонентов requestFocus для функции ex fun accept
. Функция accept делает много вещей, и все они происходят в одном потоке. Функция accept также может быть вызвана из основного потока или службы намерений. Моя проблема в том, что функция конфигурации блокирует, я не хочу блокировать основной поток. В настоящее время функция accept выглядит следующим образом:
fun accept() {
//do something
requestFocus()
// do something
}
Я не уверен, как я могу вызвать requestFocus from accept, и все операции, которые происходят после выполнения requestFocus, выполняются таким же образом. То, что я сделал в настоящее время в функции принятия, ниже
fun accept() {
//do something
runBlocking{
requestFocus()
// do something
}
Но это создает проблему, поскольку основной поток блокируется. Любое предложение, что я могу попробовать? Я изучил документацию Глобального объема и основного объема.