如何从非挂起函数获取当前的“coroutineContext”



假设我有一个日志记录函数:

fun log(message: String)

遗憾的是,此函数将从协程和协程外部调用。对于协程,我想记录来自协程上下文的其他信息(例如,协程的名称(。

我怎样才能做到这一点?

这些是我的想法,但我没有解决方案:

  • 以某种方式弄清楚log内部是否在协程内并得到coroutineContext.这可能吗?
  • 我可以有两个版本的log例如 loglogSuspend .但是我如何确保正确的人被调用?如果我在suspend里面,没有什么能阻止我意外地打电话给log。此外,我可能有一个常规的助手功能。它应该叫哪一个?
  • 也许是ThreadLocal的东西,例如,我可以在某个时候coroutineContext ThreadLocal内,但我如何确保它保持最新状态?

以某种方式在日志中找出它是否在协程内并得到 协程上下文。这可能吗?

我认为没有一个好的解决方案。

我将创建两个log函数,第一个用于通用,第二个 - CoroutineScope上的扩展函数用于协程:

fun log(message: String) {...}
fun CoroutineScope.log(message: String) {
    //here you can access coroutineContext
}

如果你像这样从协程中调用log函数:

GlobalScope.launch {
    log("CoroutineScope.log")
}

扩展函数将被调用,您将可以访问协程上下文

注意:不建议使用GlobalScope,它仅用于演示目的。

相关内容

  • 没有找到相关文章

最新更新