Итак, у меня есть последовательность типа seq<System.Threading.Tasks.Task<Restaurant>>
, и я хочу превратить ее в последовательность типа seq<Restaurant>
.
В настоящее время я использую библиотеку TaskBuilder.fs, и из моих исследований мне нужно использовать либо let! или делай! для этой ситуации, но они требуют task {}
, что при использовании с Seq.map возвращает тот же тип задачи.
let joinWithReviews (r : Restaurant) =
task {
let! reviewResult = Reviews.Database.getByLocationId cnf.connectionString r.Restaurant_Id
match reviewResult with
| Ok reviewResult ->
let restaurant = { r with Reviews = (List.ofSeq reviewResult)}
return restaurant
| Error ex ->
return raise ex
}
let indexAction (ctx : HttpContext) =
task {
let (cnf:Config) = Controller.getConfig ctx
let! result = Restaurants.Database.getAll cnf.connectionString
match result with
| Ok result ->
let restaurantWithReviews = (Seq.map joinWithReviews result)
return index ctx (List.ofSeq restaurantWithReviews)
| Error ex ->
return raise ex
}
Так что мой результат имеет тип Seq<Restaurant>
, и мне нужно добавлять отзывы в каждый ресторан, поэтому я использую Seq.map для получения restaurantWithReviews типа seq<System.Threading.Tasks.Task<Restaurant>>
, который я не смогу использовать.