如何从副作用代码中获取当前正在执行的 ZIO 光纤的 ID



我知道我可以通过调用来获取当前正在执行的光纤的 ID

ZIO.descriptor.map(_.id)

但是,我想要的是一个不纯的函数,我可以从副作用代码中调用它,让我们像这样定义它

def getCurrentFiberId(): Option[FiberId]

因此

for {
  fiberId <- ZIO.descriptor.map(_.id)
  maybeId <- UIO(getCurrentFiberId())
} yield maybeId.contains(fiberId)

产生真实。是否可以定义这样的函数,如果可以,如何定义?请注意,这个问题与如何在 ZIO 中从副作用代码访问光纤本地数据密切相关。

不可能。该信息包含在一个名为FiberContext的类的实例中,该类实际上是负责解释效果的ZIO Runtime的核心。

此外,此类是内部实现,可以理解地打包私有。

此外,它不仅有一个实例,而且每次unsafeRun效果时都有一个实例,每次解释fork时还有一个实例。

由于效果的执行未绑定到线程,因此不使用ThreadLocal,因此没有希望以某种方式以您想要的方式提取该信息。

最新更新