什麼是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