Мне кажется, я понимаю вашу проблему.Ваша цель - иметь только одну поисковую цепочку, которая не будет вызвана, если она уже запущена.Как сказал Эдвин, зацикливание вызова асинхронных потоков действительно очень плохо.Не говоря уже о том, что вложенные потоки могут даже не иметь условия уничтожения.Это было бы простым решением, но разве это не имело бы больше смысла?
val searchTask: Task<YourReturnType>? = null
private fun search() {
if(searchTask?.isRunning != true) {
searchTask = runAsync {
//Do your search thread things
} ui { result ->
//do things with your UI based on your result
}
}
}
Точно так же, если вы хотите заменить старую текущую поисковую ветку новой, вы можете попробовать что-то вроде:
val searchTask: Task<YourReturnType>? = null
private fun search() {
if(searchTask?.isRunning == true) {
searchTask?.cancel()
//You should probably do something to check if the cancel succeeded.
}
searchTask = runAsync {
//Do your search thread things
} ui { result ->
//do things with your UI based on your result
}
}