Consider the following:
Job.conCollect [
job {
printfn "start 1"
do! timeOutMillis 1000
printfn "end 1"
}
job {
printfn "start 2"
do! timeOutMillis 2000
printfn "end 2"
}
job {
printfn "start 3"
failwith "foo"
}
When run, this prints all the "start x" messages, waits for one second, prints "end 1", waits another second, prints "end 2", and then immediately throws.
I would like to run jobs in parallel (and get their results), but stop on the first exception, because (in my use-case) if one of the jobs throws an exception, the whole request fails and it makes no sense to wait for anything else, or to return more than the first exception.
Is there a simple way to do this in Hopac?
Consider the following:
When run, this prints all the "start x" messages, waits for one second, prints "end 1", waits another second, prints "end 2", and then immediately throws.
I would like to run jobs in parallel (and get their results), but stop on the first exception, because (in my use-case) if one of the jobs throws an exception, the whole request fails and it makes no sense to wait for anything else, or to return more than the first exception.
Is there a simple way to do this in Hopac?