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 が続くすべてのエンティティをプルしたいと考えています。このコードは機能するはずですが、QuerySegmented によって指定された処理await
が終了しないためにハングします。Task
私の考えでは、クエリの形式が正しくない可能性がありますが、その方法や理由はわかりません。
ところで、私は投稿するのが初めてなので、重要な情報を忘れていたり、とにかく明確にするのに役立つ場合はお知らせください.
編集: これは、動作する非常によく似たコードであり、異なる ID スキームを持つ同様の (ただし異なる) テーブルで呼び出されます。使用している api から提供された id スキームを使用する必要があるため、エントリの前に再フォーマットすることはオプションではないと思います。2 つの唯一の違いはクエリであるため、クエリのせいだと感じています。何か案は?
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);