对于查询,有时我会得到延续令牌,我想知道是否有任何针对RetryPolicy
的{{1}}设置来自动处理令牌。
答案 0 :(得分:3)
您不需要使用RetryPolicy。有两种选择:
在查询中使用.AsTableServiceQuery()。这会将您的查询转换为CloudTableQuery<>对象,本机处理继续令牌。这是最简单的路线。例如:
var query = (from r in Rows
where r.PartitionKey == "whatever"
select r).AsTableServiceQuery();
否则你可以使用Begin / EndExecuteSegmented()并自己处理令牌。
关于CloudTableQuery的澄清<>
对CloudTableQuery<>的行为有一个斜向的引用在Scott Densmore's blog。但是,我还将以下相当混乱的代码汇总在一起来证明这一点。测试通过,它确实使用continuation tokens来检索所有插入的实体。如果您使用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())
{
}
}
答案 1 :(得分:1)
表查询 - 当您使用CloudTableQuery进行查询时,它会处理 处理继续令牌,所以它使用。重新发出查询 获取的先前查询请求中收到的延续令牌 剩下的实体。如上所述,每次重新发布延续 对服务的令牌查询计为1个事务。
http://blogs.msdn.com/b/jimoneil/archive/2010/10/05/azure-home-part-7-asynchronous-table-storage-pagination.aspx和http://scottdensmore.typepad.com/blog/2010/04/paging-with-windows-azure-table-storage.html