代码之家  ›  专栏  ›  技术社区  ›  John Donnelly

扩展方法中的Azure存储表ExecuteQuerySegmentedAsync调用错误

  •  1
  • John Donnelly  · 技术社区  · 8 年前

    下面的扩展方法无法在我的ASP中编译。NETCore项目和VisualStudio将ExecuteQuerySegmentedAsync方法作为问题重点。错误(代码下面)引用了我不想要的方法签名。我想要这个 here .

    internal static class CloudTableExtensions
    {
            public static async Task<IList<DynamicTableEntity>> ExecuteQueryAsync(this CloudTable table,
                TableQuery query, CancellationToken cancellationToken = default(CancellationToken))
        {
            var items = new List<DynamicTableEntity>();
            TableContinuationToken token = null;
            do
            {
                var seg = await table.ExecuteQuerySegmentedAsync(query, token, cancellationToken);
    
                token = seg.ContinuationToken;
                items.AddRange(seg);
    
    
            } while (token != null && !cancellationToken.IsCancellationRequested 
                 && (query.TakeCount == null || items.Count < query.TakeCount.Value));
    
    
            return items;
        }
    }
    

    错误为: Error CS0411 The type arguments for method 'CloudTable.ExecuteQuerySegmentedAsync<T, TResult>(TableQuery<T>, EntityResolver<TResult>, TableContinuationToken)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

    1 回复  |  直到 8 年前
        1
  •  2
  •   Thomas    8 年前

    这个 WindowsAzure.Storage 7.1.3-Preview ASP的nuget包。NET核心1.0.0 不包含 ExecuteQuerySegmentedAsync 函数。 也许你应该在 github repo .

    否则,如果需要传递取消令牌,可以使用 this :

    internal static class CloudTableExtensions
    {
        public static async Task<IList<DynamicTableEntity>> ExecuteQueryAsync(this CloudTable table,
            TableQuery query, CancellationToken cancellationToken = default(CancellationToken))
        {
            var items = new List<DynamicTableEntity>();
            TableContinuationToken token = null;
            do
            {
                var seg =
                    await
                        table.ExecuteQuerySegmentedAsync(query, token, new TableRequestOptions(), new OperationContext(),
                            cancellationToken);
    
                token = seg.ContinuationToken;
                items.AddRange(seg);
    
    
            } while (token != null && !cancellationToken.IsCancellationRequested
                     && (query.TakeCount == null || items.Count < query.TakeCount.Value));
    
    
            return items;
        }
    }