Bri*_*nga 5 f# idioms azure-cosmosdb
处理异步 while 循环累积的惯用 F# 方式是什么?
我正在使用新的(仍处于预览阶段)Azure Cosmos DB SDK。查询数据库返回CosmosResultSetIterator<T>具有HasMoreResults属性和FetchNextSetAsync()方法的a 。我对 C# 代码的直接翻译如下所示:
let private fetchItemsFromResultSet (resultSetIterator: CosmosResultSetIterator<'a>) =
let results = ResizeArray<'a>()
async {
while resultSetIterator.HasMoreResults do
let! response = resultSetIterator.FetchNextSetAsync() |> Async.AwaitTask
results.AddRange(response |> Seq.toArray)
return Seq.toList results
}
Run Code Online (Sandbox Code Playgroud)
我会看看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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |