如何使用让!在 F# 中的 seq {} 块内并产生结果

How to use let! within a seq {} block in F# and yield result

我需要弄清楚如何在一个序列中使用 let!

注意:这是异步函数的一部分,matchTransaction 函数也是异步的。

let matchedTransactions 
    = seq {
            for cardTransactionWithOrder in cardTransactionswithOrder do
                let! matchedTranaction = matchTransaction(page,bnzBatch,cardTransactionWithOrder)
                yield! matchedTranaction
    }

我收到下面的错误,它与我正在做的事情并不完全匹配,因为 matchTranaction 函数 returns 记录(特定类型)而不是集合。

Error FS0795 The use of 'let! x = coll' in sequence expressions is not permitted. Use 'for x in coll' instead.

matchedTransactionAsync<'a> 类型。您可以构建这些异步调用的 seq 并以 Async<'a> seq 结束,然后您可以使用 Async.Parallel.

获得等待结果

您遇到的错误是您试图在 seq 计算表达式中使用 Async's let!。编译器假定您正在尝试使用 Seq's let!

let matchedTransactions = // Async<'a []>, if this is inside of an async {} block, you can use let! here

    let matchedTransactionsAsync = // seq<Async<'a>>
        seq { for cardTransactionWithOrder in cardTransactionswithOrder do
                  matchTransaction(page,bnzBatch,cardTransactionWithOrder) }

    matchedTransactionsAsync |> Async.Parallel // Async<'a []>