异步调用Azure表存储

时间:2017-04-06 21:25:05

标签: azure asynchronous .net-core azure-table-storage

以下是我用于从.NET Core类库中的Azure表存储(ATS)读取数据的方法。

问题是虽然这种方法是对ATS进行异步调用,但我不能await它。如何修改此方法,以便我可以将其作为标准" async方法?

public T Get<T>(string partitionKey, string rowKey, string tableName) where T : ITableEntity, new()
{
    var table = GetTable(tableName);

    TableQuery<T> query = new TableQuery<T>().Where(
        TableQuery.CombineFilters(
           TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey),
           TableOperators.And,
           TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey))).Take(1);

    var result = new T();

    TableContinuationToken continuationToken = null;
    do
    {
       Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
       TableQuerySegment<T> segment = querySegment.Result;
       result = segment.FirstOrDefault();
       continuationToken = segment.ContinuationToken;
     } while (continuationToken != null);

     return result;
}

如果我只是添加async Task<T>await关键字,我会在使用await时收到错误。

1 个答案:

答案 0 :(得分:3)

  

如何修改此方法以使其成为“标准”异步方法?

Result的所有来电替换为await

Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
TableQuerySegment<T> segment = await querySegment;

编译器将从那里引导您。