簡體   English   中英

在Scala中將AsyncStream [A]強制為Seq [A]

[英]Forcing an AsyncStream[A] into a Seq[A] in scala

我專門使用Twitter的AsyncStream,我需要獲取並發處理的結果並將其放入Seq中,但是我設法上班的唯一方法太可怕了。 感覺應該像是一條直線,但我在Await和force中所做的所有嘗試都已掛起或未處理。

這是我的工作-做這件事的更慣用的方法是什么?

  def processWork(work: AsyncStream[Work]): Seq[Result] = {
    // TODO: make less stupid
    val resultStream = work.flatMap { processWork }
    var results : Seq[Result] = Nil
    resultStream.foreach {
      result => {
        results = results :+ result
      }
    }
    results
  }

就像@MattFowler指出的那樣-您可以使用以下命令強制流並等待其完成:

Await.result(resultStream.toSeq, 1.second)

toSeq將開始實現流,並返回一個Future[Seq[A]] ,一旦解析了所有元素,該Future[Seq[A]]將完成,如此處所述

然后,可以使用Await.result阻止直到將來完成。

確保您的流是有限的! 調用Await.result(resultStream.toSeq, 1.second)將永遠掛起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM