组合Linq +“RangeVariables”+ TPL + DynamicTableEntity时编译器错误

时间:2012-11-26 04:22:57

标签: linq asynchronous azure task-parallel-library azure-storage

我正在查看Microsoft提供的示例"Process Tasks as they Finish",并针对Azure存储调整该TPL示例。

我遇到的问题标记在下面,变量domainData报告编译器中的错误:Unknown method Select(?) of TableQuerySegment<DynamicTableEntity>(删除了完全限定的命名空间)

我也收到以下错误DynamicTableEntity domainData \n\r Unknown type of variable domainData

      /// if you have the necessary references the following most likely should compile and give you same error

            CloudStorageAccount acct = CloudStorageAccount.DevelopmentStorageAccount;

            CloudTableClient client = acct.CreateCloudTableClient();
            CloudTable tableSymmetricKeys = client.GetTableReference("SymmetricKeys5");

            TableContinuationToken token = new TableContinuationToken() { };
            TableRequestOptions opt = new TableRequestOptions() { };
            OperationContext ctx = new OperationContext() { ClientRequestID = "ID" };
            CancellationToken cancelToken = new CancellationToken();

            List<Task> taskList = new List<Task>();

            var task2 = tableSymmetricKeys.CreateIfNotExistsAsync(cancelToken);
            task2.Wait(cancelToken);


            int depth = 3;
            while (true)
            {
                Task<TableQuerySegment<DynamicTableEntity>> task3 = tableSymmetricKeys.ExecuteQuerySegmentedAsync(query, token, opt, ctx, cancelToken);

                // Run the method
                task3.Wait();

                 Console.WriteLine("Records retrieved in this attempt = " + task3.Result.Count());// + " | Total records retrieved = " + state.TotalEntitiesRetrieved);



        // HELP! This is where I'm doing something the compiler doesn't like
        //
                IEnumerable<Task<int>> getTrustDataQuery =
                              from domainData in task3.Result select QueryPartnerForData(domainData, "yea, search for this.", client, cancelToken);

                // Prepare for next iteration or quit
                if (token == null)
                {
                    break;
                }
                else
                {
                    token = task3.Result.ContinuationToken;

                    // todo: persist token  token.WriteXml()
                }
            }




    //....

  private static object QueryPartnerForData(DynamicTableEntity domainData, string p, CloudTableClient client, CancellationToken cancelToken)
    {
        throw new NotImplementedException();
    }

1 个答案:

答案 0 :(得分:0)

您的代码缺少查询。为了测试代码,我创建了以下查询:

TableQuery<DynamicTableEntity> query = new TableQuery<DynamicTableEntity>()
    .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "temp"));

我还添加了方法QueryPartnerForData,它没有做任何事情(只返回null),一切正常。也许这是QueryPartnerForData方法的问题?找到实际错误的最佳方法是在此处设置断点。

StackOverflowException通常意味着你陷入无限循环。在断点处运行几次,看看你的代码卡在哪里。可能是QueryPartnerForData调用了另一种方法而另一种方法再次调用了QueryPartnerForData吗?