Kotlin: получить текущий CoroutineContext.Key без доступа к CoroutineScope?

, если все вышеприведенное решение не работает, возможно, тогда это может помочь. Где-то по линии вы могли подключиться к своей локальной базе данных mongodb через брандмауэры.

  1. vagrant up, а затем ssh в вашу бродячую машину, в которой вы установили соединение с mongodb (vagrant ssh vagrant_box_name )
  2. закомментируйте строку bind_ip из /etc/mongod.conf, используя # (sudo nano /etc/mongod.conf)
  3. перезапустите службу демона mongodb (перезагрузка sudo service mongod) вуаля ...
0
задан Marko Topolnik 19 March 2019 в 07:45
поделиться

1 ответ

Вы можете создать свою собственную локальную переменную потока, чтобы сохранить собственный идентификатор сопрограммы или даже непосредственно ее сохраненный вывод, и использовать функцию расширения ThreadLocal.asContextElement() для преобразования ее в элемент контекста сопрограммы. Теперь, если вы запустите свою сопрограмму с этим элементом, то указанное значение этой локальной переменной потока будет автоматически установлено в соответствующую локальную переменную потока, поскольку эта сопрограмма переходит от потока к потоку. Смотрите следующий пример кода:

import kotlinx.coroutines.*

val myId = ThreadLocal<String>()

// I'm not a suspending function, yet I know what coroutine I work in
fun whereAmI() {
    println("I'm in coroutine '${myId.get()}'")
}

fun main() = runBlocking<Unit> {
    launch(myId.asContextElement("First")) {
        whereAmI()
    }
    launch(myId.asContextElement("Second")) {
        whereAmI()
    }
}
0
ответ дан Roman Elizarov 19 March 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: