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

Azure Storage Table ExecuteQuerySegmentedAsync Call Error in Extension Method

以下扩展方法无法在我的 ASP.NET 核心项目中编译,Visual Studio 突出显示方法 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.

WindowsAzure.Storage 7.1.3-Preview ASP.NET Core 1.0.0 的 nuget 包 不包含具有此签名的 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;
    }
}