2017-04-06 82 views
2

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

问题是虽然这种方法是对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错误。

+0

标记您的方法异步:)所以'公共异步任务 GetAsync ()' –

+0

你的意思是没有“等待” – Sam

+0

不,不是无的await。这将使它成为同步方法。 –

回答

3

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

所有呼叫await替换为Result

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

编译器将引导您从那里。