Como evitar que o futuro nunca termine

d -_- b

Suponha que eu tenha várias tarefas que desejo executar em paralelo.

Cada tarefa (método) tem uma função recursiva interna que basicamente busca dados de um banco de dados e os salva em algum armazenamento de dados.

[função recursiva interna simplificada]

 def simplifiedSomeTask(): Unit = {
    @scala.annotation.tailrec
    def get(
        stream: Stream[SomeEntity],
        result: Seq[SomeEntity],
    ): Stream[SomeEntity] = result match {
      case Nil =>
        stream
      case _ =>
        val query = //query to fetch data from database
        get(
          stream append result.toStream,
          query.run.value, // get fetched data from database
        )
    }

    val buffer = collection.mutable.Map.empty[String, String]

    get(
      Stream.empty,
      query.run.value
    ).foreach { r =>
      buffer.put(r.loginId, r.userId)
    }
  }

Ao tentar executar A, Future nunca termina por algum motivo.

[UMA]

val f1 =Future { someTask1() }
val f2 =Future { someTask2() }
val f3 =Future { someTask3() }

val f = for {
  _ <- f1 
  _ <- f2 
  _ <- f3 
} yield ()

Await.result(f, Duration.Inf)

No entanto, B funciona (embora não seja executado em paralelo)

[B]

val f = for {
  _ <- Future { someTask1() }
  _ <- Future { someTask2() }
  _ <- Future { someTask3() }
} yield ()

Await.result(f, Duration.Inf)

Como devo modificar A para que funcione conforme o esperado?

d -_- b

Descobriu-se que algumas referências circulares durante a criação dos queryobjetos estavam causando esse problema.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Espere que o futuro termine

Como evitar o aviso 'Objeto possivelmente nulo' nas propriedades que serão preenchidas no futuro

Esperando que outro futuro termine para retornar uma função

Como usar o Async await sem atribuir à variável? para evitar valor que nunca usou

probabilidade de que o Redis SCAN nunca termine

como evitar que um script externo termine seu script com a instrução break

Como evitar que o eco do PHP termine uma string JS?

O comando de terminal de arquivo contém / * - Como posso evitar que isso comente o trabalho futuro?

Como podemos evitar que CTRL-C termine a tela?

Esperando que um futuro cancelado realmente termine

Spring batch jsr 352 como evitar que o trabalho particionado deixe o thread ativo, o que evita que o processo termine

Maneira recomendada de evitar que um aplicativo de console .Net Core 5 termine quando executado no Linux como um serviço

Como esperar que o JavaScript termine no dramaturgo

Como esperar que o construtor termine?

Como esperar que a função termine no SwiftUI?

Gradle Sync: aguarde até que o outro thread termine de adquirir a distribuição nunca termina

Operador Perl 6 '^ =' não produz um resultado, fazendo com que o programa nunca termine

Kotlin: tailrec faz com que a diversão do suspender nunca termine

Incorporar Matplotlib animado no Tkinter faz com que o programa nunca termine

Como esperar adequadamente até que o futuro esteja completo no dardo

Como evitar que os usuários fechem os anúncios em vídeo de recompensa até que o anúncio em vídeo termine

Como atualizar o futuro do futuro construtor

Como atualizar o futuro do futuro construtor

Como evitar que o botão apareça?

Como evitar um erro "nunca pode corresponder" do Dialyzer em uma instrução `with` que tem uma correspondência com todos os outros?

Esperando que um tópico termine e futuro

Como esperar que o SparkContext termine todo o processo?

Como fazer o jQuery esperar até que uma animação termine?

Como fazer o Gulp esperar até que o arquivo dest termine?

TOP lista

  1. 1

    Obtendo apenas o número de uma String C #

  2. 2

    como acessar a conexão do banco de dados em visualizações no codeigniter 4

  3. 3

    Como redimensionar tabelas geradas pelo Stargazer no R Markdown?

  4. 4

    recuperar valores em uma linha de dataframes com base no valor em outro

  5. 5

    Firebase Storage Web: como fazer upload de um arquivo

  6. 6

    为什么在使用argc和argv时不会出现分段错误?

  7. 7

    Como agrupar objetos em uma lista em outras listas por atributo usando streams e Java 8?

  8. 8

    Qual é a diferença entre o tamanho do passo e a taxa de aprendizado no aprendizado de máquina?

  9. 9

    Por que definir a variável como uma string vazia não é necessária em meu código?

  10. 10

    Insert a value to hidden input Laravel Blade

  11. 11

    Configure o coletor de arquivos Serilog para usar um arquivo de log por execução do aplicativo

  12. 12

    Como ler arquivos yaml em laravel?

  13. 13

    Série Fibonacci usando programação dinâmica

  14. 14

    Como adicionar elementos a um array multidimensional em PHP?

  15. 15

    How do I set an IronPython ctypes c_char_p pointer to an absolute address that is not a valid memory address to read from?

  16. 16

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  17. 17

    Como faço para que um formulário no Access se torne uma janela pop-up?

  18. 18

    Como anexar um arquivo a um e-mail usando JavaMail

  19. 19

    Adicionar campos de texto dinâmicos por meio da seleção suspensa de componentes?

  20. 20

    如何使用SOM算法进行分类预测

  21. 21

    TypeError não capturado: não é possível atribuir a propriedade somente leitura

quentelabel

Arquivo