Función anónima asincrónica en Kotlin? (expresiones lambda)

Estoy haciendo una list que llama a la function de llamada cuando hace clic.

y I want to get function is async or sync .

para bloquear cuando es asynchronous

e incluso quiero saber 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 */ } } 

y uso

 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?*/ } ) 

Puede tener List<suspend () -> Unit> , pero no puede tener ambas funciones suspendidas y no suspendidas en la misma list, excepto al usar List<Any> . Sugeriría usar dos lists separadas en su lugar. Otra solución es usar "tipo de datos algebraicos":

 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 }) 

Pero si vas a bloquear de todos modos, solo usaría List<() -> Unit> y

 listOf({ Toast.makeText(this, "clicked", Toast.LENGTH_SHORT) }, { runBlocking { // your async code } }) 
  • Kotlin, Proguard y lambdas
  • Kotlin lambdas sin usar objects
  • convert comparator en lambda en Kotlin
  • ¿Cómo funciona el generador htmlx de kotlin exactamente debajo del capó?
  • Cómo verificar el vacío lambda en kotlin
  • Kotlin: ambigüedad de resolución de sobrecarga lambda y sobrecarga
  • cómo descartar DialogFragment de lambda especificado en el llamador Kotlin
  • Comportamiento con Kotlin Higher-Order Functions e interfaces de método único?
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • Kotlin, tabla / matriz basada en inputs con campos dynamics
  • ¿Cómo se pone la expresión lambda después de los parameters en un map para llamar a la syntax legal?