Асинхронная анонимная функция в Котлине? (лямбда-выражения)

Я делаю listview, какая функция вызова при нажатии.

и I want to get function is async or sync .

для блокировки при асинхронном режиме.

и даже я хочу знать, how attach async mark to kotlin lambda expression .

 class FunctionCaller_Content(text: List<String>, val function: List< /*suspend? @async? */ ( () -> Unit )? >? = null) /* I want both of async, sync function. */ { fun isAsnyc(order: Int): Boolean = // how to get this lambda expression{function?.get(order)} is async? fun call(callerActivity: Activity, order: Int) { val fun = function?.get(order) fun() if(isAsync(fun)) /* block click for async func */ } } 

и использование.

 FunctionCaller_Content( listOf("Click to Toast1", "Click to Nothing"), listOf( { Toast.makeText(this, "clicked", Toast.LENGTH_SHORT) }, { /*if async lambda expression, how can i do?*/ } ) 

Вы можете иметь List<suspend () -> Unit> , но вы не можете иметь как приостановить, так и не приостановить функции в том же списке, кроме как с помощью List<Any> . Вместо этого я бы предложил использовать два отдельных списка. Другое решение – использовать «тип алгебраических данных»:

 sealed class SyncOrAsync // can add methods here class Sync(val f: () -> Unit) : SyncOrAsync class Async(val f: suspend () -> Unit) : SyncOrAsync class FunctionCaller_Content(text: List<String>, val function: List<SyncOrAsync>? = null) { fun call(callerActivity: Activity, order: Int) { val fun = function?.get(order) if(fun is Async) /* block click for async func */ } } FunctionCaller_Content( listOf("Click to Toast1", "Click to Nothing"), listOf(Sync { Toast.makeText(this, "clicked", Toast.LENGTH_SHORT) }, Async { // your async code }) 

Но если вы все равно заблокируете, я бы просто использовал List<() -> Unit> и

 listOf({ Toast.makeText(this, "clicked", Toast.LENGTH_SHORT) }, { runBlocking { // your async code } }) 
Intereting Posts
Наследовать от абстрактного класса с умножением варов в Котлине Множественные значения не допускаются для опции плагина. Org.jetbrains.kotlin.android:package Kotlin: Intrinsics.areEqual бесконечный цикл (переполнение стека) Как добавить пользовательские группы просмотра в Anko DSL? В чем разница между этими флагов компилятора Kotlin? Не удается сохранить выбранное состояние зрения в BaseAdapter с помощью Kotlin Как избежать избыточной нулевой проверки (предупреждение FindBugs) в поле Котлин Тип функции Kotlin вместо функционального интерфейса лямбда Как использовать перемычку Котлин с дооснащением? Есть ли способ ограничить видимость функций stdlib в Котлине? Kotlin Тип несоответствия: предполагаемый тип View! но TextView ожидался Претендент свойства lateinit не был инициализирован с помощью EasyMVP, Robolectric и Kotlin Контекст null, внезапно получая NPE после перехода на API 27 Как вызвать функцию Javascript из кода Котлина? Литералы класса Kotlin с пустой левой стороной еще не поддерживаются?