到目前为止,我一直依靠ConcurrentDictionary
作为ConcurrentDictionary
操作的积极结果,
TableResult.HttpStatusCode Property
如果该实体已经存在,则会得到一个TableResult.HttpStatusCode = 204
,如果插入成功,则会得到一个Insert
。我还尝试按照以下方式在200
上使用204
参数:
echoContent
在我的情况下不返回任何内容,因此我不确定自己是在做错什么还是在追逐独角兽。我不确定TableOperation
是只是发回您发送给它的数据,还是实际上回显了书面实体。
是否有更好的验证方法?我是不是过于依赖Azure Table存储的REST API,还是我们仅此而已?
答案 0 :(得分:0)
实际上,我实际上是先进行读取操作,然后评估结果以查看代码中早先是否存在重复项。无需先检查就执行的插入操作确实确实返回了409
,但是在调试了由于在现有实体之上插入而引起的异常之后,才发现此错误。
我的第一部分代码不那么频繁地进行活动,而更重要的是,我要检查重复的实体,这就是为什么我先读取,然后检查,然后是插入的原因。
我后面的代码来自一个API,该API吸收了大量的数据,我不想在插入之前通过查找和比较来负担事务。
为解决此问题,我设置了一个try / catch块来监视409
的特定异常类型:
catch (Microsoft.WindowsAzure.Storage.StorageException e) when (e.RequestInformation.HttpStatusCode == 409)
{
TableResult tableResult = new TableResult();
tableResult.HttpStatusCode = e.RequestInformation.HttpStatusCode;
tableResult.Result = e.Message;
return tableResult;
}
由于我的方法返回的是TableResult
类型,因此我必须格式化新的tableResult
才能发送回调用方。通过在调用方上使用switch语句,我可以处理各种情况(成功/异常)。