Skip to content

Instantly share code, notes, and snippets.

@davidlhw
Created June 14, 2023 04:36
Show Gist options
  • Save davidlhw/f6d9ef422e6aa2d547292e2a4a21b937 to your computer and use it in GitHub Desktop.
Save davidlhw/f6d9ef422e6aa2d547292e2a4a21b937 to your computer and use it in GitHub Desktop.
let s3List i = task {
return [| $"foo%d{i}"; $"bar{i}"; $"baz{i}" |]
}
let s3Download k = task {
return $"data%s{k}"
}
let inline flip f x y = f y x // from FSharpPlus
let foo() = async {
let! arrOfSetOfKeys = Async.Parallel <| seq {
for d = 20230501 to 20230503 do
yield async {
let! keysList = s3List d |> Async.AwaitTask
return Set.ofArray keysList
}
}
let allKeys = Set.unionMany arrOfSetOfKeys
let dlJobs = flip Seq.map allKeys <| fun k -> async {
let! data = s3Download k |> Async.AwaitTask
printfn $"data downloaded: %s{data}"
return k
}
let limitParallelism = 3
return! Async.Parallel(dlJobs, limitParallelism)
}
let bar() = let f = foo() |> Async.RunSynchronously
printfn "%A" f
bar()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment