Azure DocumentDb上未替换的文档
我将Azure的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
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#经验让我对同步运行的命令感到警惕。在你给出的上下文中,它更有意义。我能够得到一个令人困惑的错误,解决它,现在我可以更新文档了。谢谢很高兴我能帮忙。