Kotlin 如何从非挂起函数获取当前“coroutineContext”?
假设我有一个日志功能:Kotlin 如何从非挂起函数获取当前“coroutineContext”?,kotlin,kotlinx.coroutines,kotlin-coroutines,Kotlin,Kotlinx.coroutines,Kotlin Coroutines,假设我有一个日志功能: fun log(message: String) 不幸的是,这个函数将同时从协程和在协程之外调用。对于协同路由,我想记录来自协同路由上下文的附加信息(例如,协同路由的名称) 我怎样才能做到这一点 这些是我的想法,但我没有解决办法: 不知何故,在log中找出它是否在协同程序中,并获取coroutineContext。这可能吗 我可以有两个版本的log,例如log和logSuspend。但是,我如何确保正确的人被呼叫?如果我在suspend内,没有任何东西可以阻止我意外调
fun log(message: String)
不幸的是,这个函数将同时从协程和在协程之外调用。对于协同路由,我想记录来自协同路由上下文的附加信息(例如,协同路由的名称)
我怎样才能做到这一点
这些是我的想法,但我没有解决办法:
- 不知何故,在
中找出它是否在协同程序中,并获取log
。这可能吗coroutineContext
- 我可以有两个版本的
,例如log
和log
。但是,我如何确保正确的人被呼叫?如果我在logSuspend
内,没有任何东西可以阻止我意外调用suspend
。此外,我可能有一个常规的助手函数。应该叫哪一个log
- 可能是带有
的东西,例如,我可以在ThreadLocal
中的ThreadLocal
,但如何确保它保持最新coroutineContext
log
函数,第一个用于一般用途,第二个是CoroutineScope
上的一个扩展函数,用于coroutines:
fun log(message: String) {...}
fun CoroutineScope.log(message: String) {
//here you can access coroutineContext
}
如果您从协同程序调用log
函数,如下所示:
GlobalScope.launch {
log("CoroutineScope.log")
}
将调用扩展函数,您将可以访问coroutineContext
注意:不建议使用GlobalScope,它仅用于演示目的
不知何故,找出日志的内部,如果它在一个协同程序中,并获取
协同文本。这可能吗
我认为没有一个好的解决办法
我将创建两个log
函数,第一个用于一般用途,第二个是CoroutineScope
上的一个扩展函数,用于coroutines:
fun log(message: String) {...}
fun CoroutineScope.log(message: String) {
//here you can access coroutineContext
}
如果您从协同程序调用log
函数,如下所示:
GlobalScope.launch {
log("CoroutineScope.log")
}
将调用扩展函数,您将可以访问coroutineContext
注意:不建议使用GlobalScope,它仅用于演示目的