Java 等待多个scala异步

Java 等待多个scala异步,java,scala,csv,async-await,sbt,Java,Scala,Csv,Async Await,Sbt,我想在执行所有异步块时关闭csv编写器 import java.io.{FileReader, FileWriter} import com.opencsv.{CSVReader, CSVWriter} import org.jsoup.helper.StringUtil import scala.async.Async.{async, await} import scala.concurrent.ExecutionContext.Implicits.global var rows = 0 r

我想在执行所有异步块时关闭csv编写器

import java.io.{FileReader, FileWriter}
import com.opencsv.{CSVReader, CSVWriter}
import org.jsoup.helper.StringUtil
import scala.async.Async.{async, await}
import scala.concurrent.ExecutionContext.Implicits.global

var rows = 0
reader.forEach(line => {
  async {
    val csv = new CSV(line(0), line(1), line(2), line(3), line(4));
    entries(0) = csv.id
    entries(1) = csv.name
    val di = async(httpRequest(csv.id))
    var di2 = "not available"
    val di2Future = async(httpRequest(csv.name))
    di2 = await(di2Future)
    entries(2) = await(di)
    entries(3) = di2
    writer.writeNext(entries)
    println(s"${csv.id} completed!!!! ")
    rows += 1
  }
})
writer.close();

在上面的代码编写器总是先关闭,所以我想执行所有异步块,然后关闭我的csv编写器。

一个
异步
块产生一个
未来[a]
,其中
a
在您的情况下是
单位
(这是赋值的类型
行+=1

一般来说,当
未来
完成时,您可以执行如下操作:

def myFuture: Future[Something] = ??? // your async process

myFuture.onComplete {
  case Success(result) =>
    ???
  case Failure(exception) =>
    ???
}
如果要执行某些操作,而不考虑状态,则可以跳过模式匹配:

myFuture.onComplete(_ => writer.close()) // e.g.

下面是一个框架解决方案

  val allResponses = reader.map(l => {
    val entries = ??? // declare entires data structure here

    for {
      line <- async(l)
      // line <- Future.succesful(l)

      csv <- async {
        val csv = CSV(line(0), line(1), line(2), line(3), line(4))
        entries(0) = csv.id
        entries(1) = csv.name
        csv
      }

      di <- async {
        httpRequest(csv.id)
      }

      di2 <- async {
        httpRequest(csv.name)
      }

      e <- async {
        entries(2) = di
        entries(3) = di2

        entries
      }
    } yield e
  })

  val t = Future.sequence(allResponses)

  t.map(a => {
    val writer = new FileWriter("file.txt")
    a.foreach(i => {
      writer.writeNext(i)
    })

    writer.close()
  })
val allResponses=reader.map(l=>{
val entries=???//在此处声明entires数据结构
为了{

Future.sequence(allResponses)
类型不匹配处获取行时出错,应为:NotIntferedM[Future[NotInferedA]],actuval:Unit@GovindSingh:编译器无法推断
读取器
条目
的类型。请检查您的代码。很难用您提供的代码给出准确答案。我创建了一些伪代码来复制您的函数,它编译得很好。