gpt4 book ai didi

c# - 在Azure表存储中,如何原子地执行 "get or insert"?

转载 作者:行者123 更新时间:2023-12-04 07:27:53 26 4
gpt4 key购买 nike

我正在使用 C#、.NET 5.0 和 Microsoft.Azure.Cosmos.Table 版本 1.0.8 开发 C# Azure 应用程序。我想做以下事情:

  1. 在表存储中查找具有特定分区键和行键的行/实体。
  2. 如果存在,则返回该实体。
  3. 如果不存在,则创建一个,将其存储到表存储中并返回。

我想以原子方式执行此操作以避免竞争条件(即,如果两个线程尝试同时执行此操作,我想保证它们返回相同的值,并且只有一个实体存储在表存储中)。

TableOperationInsertOrMergeInsertOrReplace,但它们似乎不是我想要的。据我所知,他们都更喜欢写入的 last 值,这是我不想要的。我希望它保留写入的第一个值(以便所有并发线程将返回相同的值)。

我该怎么做?

提前致谢!

最佳答案

据我所知,不可能以原子方式完成您想要做的事情。您需要执行 2 项操作。

您的第一个操作将是Insert 操作(而不是InsertOrMergeInsertOrReplace)。如果实体不存在,则创建该实体并返回新创建的实体。

如果表中存在该实体,您的插入操作将失败并出现冲突 (409) 错误。您的应用程序代码将需要处理此错误并从表中读取实体并返回该实体。

关于c# - 在Azure表存储中,如何原子地执行 "get or insert"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68125615/

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