Я бы взглянул на пакет AsyncSeq . Вы можете использовать его для создания асинхронно вычисляемых последовательностей, а затем повторять их асинхронно или параллельно. Это позволяет асинхронному связыванию находиться внутри последовательности, а выход происходит асинхронно, поэтому вам не нужно явно собирать аккумулятор.
Вы можете использовать это, чтобы сделать что-то вроде:
open FSharp.Control
let private fetchItemsFromResultSet (resultSetIterator: CosmosResultSetIterator<'a>) =
asyncSeq {
while resultSetIterator.HasMoreResults do
let! response = resultSetIterator.FetchNextSetAsync() |> Async.AwaitTask
yield! response |> AsyncSeq.ofSeq
}