Scala Future或其他并行执行Java void方法的方法

Scala Future或其他并行执行Java void方法的方法,scala,future,Scala,Future,我有以下代码: stringList map copyURLToFile // List[String] def copyURLToFile(symbol: String) = { val url = new URL(base.replace("XXX", symbol)) val file = new File(prefix + symbol + ".csv") org.apache.commons.io.FileUtils.copyURLToFile(url, file) }

我有以下代码:

stringList map copyURLToFile // List[String]

def copyURLToFile(symbol: String) = {
  val url = new URL(base.replace("XXX", symbol))
  val file = new File(prefix + symbol + ".csv")
  org.apache.commons.io.FileUtils.copyURLToFile(url, file)
}
如何使copyURLToFile并行执行


Scala Futures需要一个返回类型,但是如果我将copyURLToFile设置为Future[Unit]类型,那么从函数返回什么以及如何返回?

如果您想要一种非常简单的并行化方法,那么只需使用


你需要返回一些东西,你怎么知道哪些文件在哪里下载

将代码更改为:

def copyURLToFile(symbol: String): (String,String) = {
  val url = new URL(base.replace("XXX", symbol))
  val file = new File(prefix + symbol + ".csv")
  org.apache.commons.io.FileUtils.copyURLToFile(url, file)
  return (symbol, file)
}

然后,生成的集合将包含符号和下载它们的文件的路径。

可能的副本可以在
=
{
之间添加
future
,如下所示:
def copyrltofile(symbol:String)=future{
我尝试在future{递归遍历列表,但不起作用。递归起作用,但对org.apache.commons.io.FileUtils.copyURLToFile的调用不起作用(未创建任何文件)。我想问题是Java方法返回void。实际上,问题可能是我作为一个独立程序执行,其主线程在工作线程可以执行之前终止,正如这里所述,void本身不是问题,问题是您的主线程不访问结果,因此它不会等待它。工作太好了。现在快多了。更大的问题是代码不会等待下载完成,因为它不会尝试访问结果。
def copyURLToFile(symbol: String): (String,String) = {
  val url = new URL(base.replace("XXX", symbol))
  val file = new File(prefix + symbol + ".csv")
  org.apache.commons.io.FileUtils.copyURLToFile(url, file)
  return (symbol, file)
}