使用 TableContinuationToken 作为书签
本文关键字:书签 TableContinuationToken 使用 | 更新日期: 2023-09-27 18:36:15
从这里获取的这个查询非常简单:
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
} while (token != null);
返回 null 后,while 循环结束。是否可以存储最后一个 TableContinuationToken,然后在一段时间后检查在最后一个 TableContinuationToken 之后是否输入了更多鞋类。为了创建"秩序",我使用这种方法。
附注:
我希望以下内容提供更多的背景信息。我目前存储此类的实例:
public class SomeClass : TableEntity
{
public long Ticks { get; set; }
public SomeClass(){}
public SomeClass(string partitionKey)
{
PartitionKey = partitionKey;
Ticks = DateTime.UtcNow.Ticks - DateTime.MinValue.Ticks;
// rowkey + partition = guid/pk
// used to order events at the other end - very important
RowKey = (DateTime.UtcNow.Ticks - DateTime.MinValue.Ticks).ToString();
}
}
在 Azure 表存储中。要创建这样的行键,我可以像这样对实体进行排序:
var query =
(from s in _table.CreateQuery<SomeClass>()
where
s.PartitionKey == _partitionKey &&
string.Compare(s.RowKey, rowKeyToUse, StringComparison.Ordinal) > 0
select s).AsTableQuery();
我不时想检查是否有新实体。我认为我不能为此使用rowkey(另请参阅此处)。因此,目前我存储消耗表存储的过程中最后一个实体的最新 Tick。我可以使用此查询来拉取新实体:
var query =
(from s in _table.CreateQuery<SomeClass>()
where
storedEvent.PartitionKey == _partitionKey &&
storedEvent.Ticks > _ticks && // only above last threshold
string.Compare(s.RowKey, rowKeyToUse, StringComparison.Ordinal) > 0
select s).AsTableQuery();
所以简而言之 - 这就是我想要实现的目标:
(1) 翻阅所有实体,直到令牌 = null。(2)"拉"表存储。如果有新实体,则循环直到令牌 = null。(3) 重复 (2)
我追求最简单,最强大的方法。目前,我正在使用上述即时报价方法。但是,这感觉是错误的,因为相同的信息已经作为字符串存储在行键中。我希望这是有道理的。
如果存储返回的最终实体的分区键和行键,则可以在将来执行 TableQuery 来检查这一点。筛选器应为该实体的分区键 = (如已有)和行键>该实体的行键。然后,您可以使用与已有完全相同的代码。