gpt4 book ai didi

F# 惯用的 async while 循环累加转换

转载 作者:行者123 更新时间:2023-12-05 00:10:57 24 4
gpt4 key购买 nike

处理异步 while 循环累积的惯用 F# 方式是什么?

我正在使用新的(仍处于预览阶段)Azure Cosmos DB SDK。查询数据库返回 CosmosResultSetIterator<T>其中有一个 HasMoreResults属性(property)和 FetchNextSetAsync()方法。我对 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
}

最佳答案

我会看看AsyncSeq包裹。您可以使用它来创建异步计算的序列,然后异步或并行迭代它们。这允许 async-binding 在序列内,并且 yield 异步发生,因此您不必显式构建累加器。

您可以使用它来执行以下操作:

open FSharp.Control

let private fetchItemsFromResultSet (resultSetIterator: CosmosResultSetIterator<'a>) =
asyncSeq {
while resultSetIterator.HasMoreResults do
let! response = resultSetIterator.FetchNextSetAsync() |> Async.AwaitTask
yield! response |> AsyncSeq.ofSeq
}

关于F# 惯用的 async while 循环累加转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com