正如上面所说的https://msdn.microsoft.com/en-us/library/azure/dd135718.aspx
"It is possible for a query to return no results but to still return a continuation header."
所以我的问题是 - 那么调用者的行为应该是什么?
- 一段时间后重试?
- 将其视为结果集的结尾吗?
- 创建新查询,无需继续。根据最后检索的数据更新 token 过滤器?
还有人说, “针对表服务的查询一次最多可返回 1,000 个项目,并且执行时间最长为 5 秒。如果结果集包含超过 1,000 个项目,如果查询未在 5 秒内完成,或者如果查询跨越分区边界,响应包含为开发人员提供继续标记的 header ,以便在结果集中的下一项恢复查询。可以为查询表操作或查询实体操作返回连续标记 header ”
因此,当始终返回带有继续标记的空结果时,重试策略可能会导致我们陷入无限循环......
最佳答案
您应该立即构建并使用下一个查询,并在其中传递继续标记。如上所述here: Query Timeout and Pagination 。将从上一个请求结束的位置开始搜索表存储。您得到的结果为空,因为表存储在五秒内没有找到任何匹配的数据,但仍有数据可供搜索。
After you have retrieved the continuation tokens, use their values to construct a query to return the next page of results.
如果您使用 .NET 和程序集 Microsoft.WindowsAzure.Storage,则有一个 BeginExecuteQuerySegmented 方法可以为您构建所有请求。示例:https://stackoverflow.com/a/13428086/1051244
关于Azure 表查询返回空结果,且连续标记不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455298/