Как получить идентификатор текущего выполняющегося волокна ZIO из кода побочных эффектов

Я знаю, что могу узнать идентификатор текущего выполняющегося волокна, позвонив

ZIO.descriptor.map(_.id)

Однако то, что я хочу, - это нечистая функция, которую я могу вызвать из кода с побочными эффектами, давайте определим ее как

def getCurrentFiberId(): Option[FiberId]

так что

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

дает истину. Можно ли определить такую ​​функцию, и если да, то как? Обратите внимание, что этот вопрос тесно связан с тем, как получить доступ к локальным данным волокна из побочного кода в ZIO.

0 ответов

Невозможно. Эта информация содержится в экземпляре класса с именемFiberContext что практически является ядром ZIO Runtime отвечает за интерпретацию Эффектов.

Кроме того, такой класс является внутренней реализацией и по понятным причинам является закрытым пакетом.

Кроме того, для этого есть не только один экземпляр, но и по одному на каждый раз, когда вы unsafeRun эффект и еще один каждый раз fork интерпретируется.

Поскольку выполнение эффекта не привязано к потоку, ThreadLocal не используется, и поэтому нет никакой надежды извлечь эту информацию так, как вы хотите.

Другие вопросы по тегам