7

执行以下代码时出现此错误:

var insert = new TableBatchOperation();
foreach (var entity in entities)
{
    insert.Insert(entity);
}
cloudTable.ExecuteBatch(insert);  

实体集合包含 512 个元素。Azure SDK 通过 StorageException:

"Unexpected response code for operation : 99" 

这个错误是什么意思,我该如何解决?

4

2 回答 2

18

此非描述性错误意味着 Azure 批量操作(至少在本例中)最多占用 100 个元素。限制你的批次,你会很好。

我最终使用了这样的东西:

public void Insert(IEnumerable<T> entities)
{
    foreach (var chunk in entities.Chunk(100))
    {
        InsertMaxLimitElements(chunk);
    }
}

private void InsertMaxLimitElements(IEnumerable<T> chunk)
{
    var insert = new TableBatchOperation();

    foreach (var entity in chunk)
    {
        insert.Insert(entity);
    }
    cloudTable.ExecuteBatch(insert);
}

Chunk 扩展方法是从这个答案中复制的:

public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize)
{
    while (source.Any())
    {
        yield return source.Take(chunksize);
        source = source.Skip(chunksize);
    }
}
于 2013-08-11T10:20:16.380 回答
0

如果批量大小小于 100,也可能意味着您有重复的条目(具有相同行键的两个条目)。如果单独写入条目成功但批量写入失败,则很可能出现这种情况。

于 2019-02-01T06:10:17.540 回答