Azure表:ExcuteBatch返回什么结果?

时间:2019-08-07 03:11:28

标签: azure azure-storage azure-table-storage azure-tablequery

我有一个azure函数应用程序,它将基于一个分区键生成多个条目。如果函数执行期间发生任何错误。我首先删除了Azure表上具有相同分区键的所有实体,以防该函数第二次或第三次重试并插入重复的记录。

因此,我决定通过遍历一组100多个实体来使用ExcuteBatch操作。

我不确定TableBatch将返回什么。是否返回所有成功删除结果?

这是我在现阶段所写的。

var projectionQuery = new TableQuery()
            .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "partitionKey"))
                .Select(new[] { "RowKey" });

        var entities = table.ExecuteQuery(projectionQuery).ToList();
        var offset = 0;
        while (offset < entities.Count)
        {
            var batch = new TableBatchOperation();
            var rows = entities.Skip(offset).Take(100).ToList();
            foreach (var row in rows)
            {
                batch.Delete(row);
            }

            var result = table.ExecuteBatch(batch);

            offset += result.Where(x=>x.HttpStatusCode == (int) HttpStatusCode.NoContent).Count() + offset;
        }

如果以上代码正确。会有一个无限循环,其中尝试删除的数据无法删除,并且一直尝试删除。

1 个答案:

答案 0 :(得分:0)

不。一旦任何批处理操作失败,您的代码将退出循环。如果删除批处理中的任何实体失败,基本上遵循以下代码行将引发异常。

var result = table.ExecuteBatch(batch);

我在下面的代码行中注意到了另一件事:

offset += result.Where(x=>x.HttpStatusCode == (int) HttpStatusCode.NoContent).Count() + offset;

为什么已经做offset时又在表达式的末尾再次添加offset +=