Kotlin中的异步匿名函数? (lambda表达式)

我正在做一个listview什么时候点击调用函数。Kotlin中的异步匿名函数? (lambda表达式)

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

}

})

以上是 Kotlin中的异步匿名函数? (lambda表达式) 的全部内容, 来源链接: utcz.com/qa/260102.html

回到顶部