Monday, May 31, 2010

F# Parallelism using Agent


// Learn more about F# at http://fsharp.net


namespace JQD

type Downloader() =

let ParallelWorker n f =
MailboxProcessor.Start( fun inbox->
let workers =
Array.init n ( fun i ->MailboxProcessor.Start(f))
let rec loop i = async {
let! msg=inbox.Receive()
workers.[i].Post(msg)
return! loop( (i+1)%n)
} loop 0
)



let agent =
ParallelWorker 8,
(fun input ->
let rec loop() = async {

do! Async.Sleep(5000)
return! loop()
}
loop()
)


member this.DowloadAll()=
ParallelWorker 8, (fun data ->
let rec loop() = async {

do! Async.Sleep(5000)
return! loop()
}
loop()
)

No comments: