gpt4 book ai didi

azure - Azure表实体存在/同步

转载 作者:行者123 更新时间:2023-12-03 08:57:43 29 4
gpt4 key购买 nike

我正在使用azure表查询来检索分配给用户的所有错误实体。
此外,我更改了实体的属性以声明该实体处于处理模式。
处理完实体后,我将从表中删除该实体。

当我进行并行测试时,可能会发生查询期间,一个实体已经被另一个线程处理并删除的情况。因此,当我要替换实体时,出现错误404 ResourceNotFound。

有没有一种方法可以测试该实体是在线程外部更改还是仍然存在?捕获错误404并忽略它是否更好,还是我应该再次查询该实体(似乎对我来说不合适)?

TableQuery<ErrorObjectTableEntity> query = new TableQuery<ErrorObjectTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, user));
List<ErrorObjectTableEntity> queryResult = table.ExecuteQuery(query).OrderBy(x => x.action).ToList();
foreach (ErrorObjectTableEntity entity in queryResult)
{
entity.inProcess = true;
try
{
TableOperation updateOperation = TableOperation.Replace(entity);
table.Execute(updateOperation);
}
catch
{
//..some logging here
//catch error 404?
}
//do some action
try
{
TableOperation deleteOperation = TableOperation.Delete(entity);
table.Execute(deleteOperation);
}
catch{...}
}

最佳答案

关于最佳实践,这里有几个问题。假设其他工作人员将其删除,那么编写的代码可能会忽略该异常,但这最终可能掩盖其他类别的错误。一种解决方案是使用队列在每个用户查询中插入消息,然后让各种工作人员检索消息并为特定用户处理查询。这样,如果节点出现故障,应用程序将吸收故障并继续运行。此外,这将使您的工作人员避免重复工作,从而优化整个应用程序。最后,如果您不关心实体的状态并且键是可预测的,则可以使用Merge语义简单地更新实体的给定属性,而不用替换整个实体。

关于azure - Azure表实体存在/同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18785561/

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