Azure DocumentDb上未替换的文档

Azure DocumentDb上未替换的文档,azure,f#,azure-cosmosdb,Azure,F#,Azure Cosmosdb,我将Azure的DocumentDb与F#一起使用,并且我能够创建新文档、加载所有文档,以及通过Id加载文档,并在其中应用了过滤器。但是我不能替换任何文档,而且在F#中几乎没有文档 这是我用来更新文档的函数: let update (c : MyObject) = let cli = createClient() cli.ReplaceDocumentAsync(documentUri(), c) |> Async.AwaitTask |> ignor

我将Azure的
DocumentDb
与F#一起使用,并且我能够创建新文档、加载所有文档,以及通过Id加载文档,并在其中应用了
过滤器。但是我不能替换任何文档,而且在F#中几乎没有文档

这是我用来更新文档的函数:

let update (c : MyObject) =
    let cli = createClient()
    cli.ReplaceDocumentAsync(documentUri(), c)
    |> Async.AwaitTask
    |> ignore
    c
createClient
只需创建一个
DocumentClient
的新实例,其参数与加载和保存新文档的参数相同。类似地,
documentUri()
也适用于其他函数

我的猜测是,我实际上从任务中得到了一个有用的响应,而我忽略了这个响应(基于我看到的示例)。然而,想要得到这样的回应却很困难

这是我尝试使用的一种方法,但最终使用的是一种我似乎无法使用的类型:

let update2 ( c : MyObject) =
    let cli = createClient()
    let updatedDoc = async {
        return! cli.ReplaceDocumentAsync(documentUri(), c) |> Async.AwaitTask
    }
    updatedDoc
这里,
updatedoc
属于
Async
类型。我似乎找不到办法将其从
Async
包装器中取出,一旦找到,我就不知道如何将
文档
转换为
MyObject

因此,总而言之:

  • 问题是我无法更新文档
  • 我怀疑我从任务中得到了一条错误消息或一些我忽略的东西
  • F#
    async
    计算不同于C#
    任务
    s,因为它们不是当场执行的。简单地创建一个
    async
    计算不起任何作用:

    let x = async { printfn "Foo!" }  // No output is generated here
    
    为了实际运行它,您需要指定如何运行它:在线程池上调度它,在当前线程上同步运行,转换为任务,等等。例如:

    let x = async { printfn "Foo!" }
    Async.RunSynchronously x // Prints "Foo!"
    
    或者,可以通过将异步计算包含在另一个异步计算中来“运行”该异步计算,然后以某种方式执行该异步计算:

    let y = async {
         do! x
         printfn "Bar!"
       }
    
    Async.RunSynchronously y  // Prints "Foo!" and then "Bar!"
    
    因此,为了执行第二个示例(并希望看到返回的错误),您需要实际运行生成的工作流:

    let update2 ( c : MyObject) =
        let cli = createClient()
        let updateDoc = cli.ReplaceDocumentAsync(documentUri(), c) |> Async.AwaitTask
        Async.RunSynchronously updateDoc
    

    是的,我知道它们是不同的,但我的C#经验让我对同步运行的
    命令感到警惕。在你给出的上下文中,它更有意义。我能够得到一个令人困惑的错误,解决它,现在我可以更新文档了。谢谢很高兴我能帮忙。