2017-04-06 57 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; 

編譯器將引導您從那裏。