以下是我用于从.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
时收到错误。
答案 0 :(得分:3)
如何修改此方法以使其成为“标准”异步方法?
将Result
的所有来电替换为await
:
Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
TableQuerySegment<T> segment = await querySegment;
编译器将从那里引导您。