什么是F#异步工作流的Scala等价物?什么是F#异步工作流程的Scala等价物?
例如,如何将F#代码片段转换为惯用的Scala?
open System.Net
open Microsoft.FSharp.Control.WebExtensions
let urlList = [ "Microsoft.com", "http://www.microsoft.com/"
"MSDN", "http://msdn.microsoft.com/"
"Bing", "http://www.bing.com"
]
let fetchAsync(name, url:string) =
async {
try
let uri = new System.Uri(url)
let webClient = new WebClient()
let! html = webClient.AsyncDownloadString(uri)
printfn "Read %d characters for %s" html.Length name
with
| ex -> printfn "%s" (ex.Message);
}
let runAll() =
urlList
|> Seq.map fetchAsync
|> Async.Parallel
|> Async.RunSynchronously
|> ignore
runAll()
不要告诉任何人,但F#的工作流程是变相只是单子。如果Scala对Monad有一些语法(我不会说Scala,所以我不能说),那么这就相当于。 – 2011-04-07 10:48:30
这不是完全真实的 - 它是继续monad加上很多额外的东西,用于异常处理和ThreadPool /任务等的使用 - 这是不平凡的,只是重做这个 – Carsten 2012-06-25 11:06:39
@ R.MartinhoFernandes“不要告诉任何人,但F#的工作流程只是变相的monad“。这是不正确的。 *计算表达式*是F#中monadic语法的一般框架,其中异步工作流是一种特殊形式,旨在使非阻塞代码更具可读性。 – 2012-06-25 17:37:12