Azure表查询分段无返回



我正试图从AzureTable中提取一组实体,并使用以下代码来查询它。

string partitionKey = string.Format(CultureInfo.InvariantCulture, "{0:d20}", accountId);
string rowKeyStart = string.Format(CultureInfo.InvariantCulture, "{0}:g", work.lead.id);
string rowKeyEnd = string.Format(CultureInfo.InvariantCulture, "{0}:h", work.lead.id);
var context = table.ServiceClient.GetTableServiceContext();
var query = context.CreateQuery<LinkedInPostEntity>(table.Name)
        .Where(w => w.PartitionKey == partitionKey && w.RowKey.CompareTo(rowKeyStart) > 0 && w.RowKey.CompareTo(rowKeyEnd) <= 0)
        .AsTableServiceQuery(context);
List<PostEntity> postsForLead = new List<PostEntity>();
TableContinuationToken continuation = null;
do
{
    TableQuerySegment<PostEntity> segment = await AzureHelper.QuerySegmented(query, continuation);
    postsForLead.AddRange(segment.Results);
    continuation = segment.ContinuationToken;
} while (continuation != null);

table是CloudTable的一个实例,accountId是int类型,work.lead.id是字符串类型。我想拉所有的实体有一个RowKey前缀的work.lead.id:g,后面跟着一个字符串id。我觉得这段代码应该工作,但它挂在await上,永远不会完成QuerySegmented给出的Task

我的想法可能是查询格式不正确,但我不确定如何或为什么。

顺便说一句,我是新手,所以如果我忘记了任何重要的信息,请告诉我,或者可以帮助我澄清。

编辑:这是一个非常相似的代码,工作,它被调用在一个类似的(虽然不同)表,有一个不同的id方案。我需要使用我正在使用的api给我的id方案,所以我不认为在进入之前重新格式化它是一个选项。两者之间唯一的区别是查询,所以我觉得我的查询是罪魁祸首。什么好主意吗?

string partitionKey = string.Format(CultureInfo.InvariantCulture, "{0:d20}", accountId);
string rowKeyStart = string.Format(CultureInfo.InvariantCulture, "{0}:{1:d20}", work.ScreenName, (long)0);
string rowKeyEnd = string.Format(CultureInfo.InvariantCulture, "{0}:{1:d20}", work.ScreenName, long.MaxValue);
var context = table.ServiceClient.GetTableServiceContext();
var query = context.CreateQuery<TweetEntity>(table.Name)
        .Where(w => w.PartitionKey == partitionKey && w.RowKey.CompareTo(rowKeyStart) >= 0 && w.RowKey.CompareTo(rowKeyEnd) <= 0)
        .AsTableServiceQuery(context);
List<TweetEntity> tweetsForLead = new List<TweetEntity>();
TableContinuationToken continuation = null;
do
{
    TableQuerySegment<TweetEntity> segment = await AzureHelper.QuerySegmented(query, continuation);
    tweetsForLead.AddRange(segment.Results);
    continuation = segment.ContinuationToken;
} while (continuation != null);

我的蜘蛛侠感觉告诉我,你调用这个方法,然后调用WaitResult上返回的任务,从ASP。. NET或UI上下文。如果你这样做,你会死锁,正如我在我的博客上解释的。

相关内容

  • 没有找到相关文章

最新更新