Вам не нужно использовать RetryPolicy для этого. Есть два варианта:
Используйте .AsTableServiceQuery () в своих запросах. Это преобразует ваш запрос в объект CloudTableQuery <>, который изначально обрабатывает токены продолжения. Это самый простой маршрут. например:
var query = (from r in Rows
where r.PartitionKey == "whatever"
select r).AsTableServiceQuery();
В противном случае вы можете использовать Begin / EndExecuteSegmented () и обрабатывать токены самостоятельно.
Разъяснение по CloudTableQuery <>
В блоге Скотта Денсмора есть косвенная ссылка на поведение CloudTableQuery <>. Но я также собрал следующий, довольно грязный код, чтобы доказать это. Тесты проходят, и он использует токены продолжения для извлечения всех вставленных сущностей. Если вы используете HTTP, вы можете посмотреть его с помощью Fiddler и увидеть, как токены идут туда-сюда.
[Test, Explicit]
public void WriteAndReadALotOfRows()
{
CloudStorageAccount acct = CloudStorageAccount.Parse("PUT IN SOME CREDS HERE");
TableServiceContext ctx = null;
List<TestEntity> testEntities = new List<TestEntity>(2000);
acct.CreateCloudTableClient().CreateTableIfNotExist("Test");
//Create entities
for (int i = 0; i < 2000; i++)
{
if (i % 100 == 0)
{
if (ctx != null)
{
ctx.SaveChangesWithRetries(SaveChangesOptions.Batch);
}
ctx = new TableServiceContext(acct.TableEndpoint.AbsoluteUri, acct.Credentials);
}
TestEntity entity = new TestEntity(i);
testEntities.Add(entity);
ctx.AddObject("Test", entity);
}
ctx.SaveChangesWithRetries(SaveChangesOptions.Batch);
ctx = new TableServiceContext(acct.TableEndpoint.AbsoluteUri, acct.Credentials);
List<TestEntity> retrievedEntities = (from r in ctx.CreateQuery<TestEntity>("Test")
select r).AsTableServiceQuery().ToList();
Assert.AreEqual(testEntities.Count, retrievedEntities.Count);
Console.Out.WriteLine(retrievedEntities.Count); //prints 2000
foreach (var insertedEntity in testEntities)
{
TestEntity retrievedEntity = retrievedEntities.First(r => r.RowKey == insertedEntity.RowKey);
Assert.NotNull(retrievedEntity);
}
}
public class TestEntity : TableServiceEntity
{
public TestEntity()
{
}
public TestEntity(int id)
: base("Test", id.ToString())
{
}
}