[英]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.