Как я могу запустить некоторый код asyn c, не блокируя текущий сопрограмм весной, webflux kotlin сопрограмму, как подписка ()? - PullRequest
0 голосов
/ 22 апреля 2020

Чтобы создать фоновую задачу, не блокируя текущий поток запросов, я знаю, что мог бы использовать subscribe() в Spring WebFlux. Но как я могу сделать это весной webflux kotlin сопрограмма? только GlobalScope.lanuch{}?

1 Ответ

1 голос
/ 22 апреля 2020

Эквиваленты сопрограмм:

  • someFlux().subscribe { ... } становится someFlow().onEach { ... }.launchIn(GlobalScope)
  • someMono().subscribe { ... } становится GlobalScope.launch { someSuspendingFun() }

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

...