对 Azure Table 存储的异步调用
Async call to Azure Table Storage
以下是我在我的 .NET Core class 库中从 Azure Table 存储 (ATS) 读取数据的方法。
问题是虽然此方法正在对 ATS 进行异步调用,但我不能 await
它。如何修改此方法,使其成为 "standard" 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
.
的地方出错
How do I modify this method so that I can make it a "standard" async method?
将对 Result
的所有调用替换为 await
:
Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
TableQuerySegment<T> segment = await querySegment;
编译器将从那里指导您。
以下是我在我的 .NET Core class 库中从 Azure Table 存储 (ATS) 读取数据的方法。
问题是虽然此方法正在对 ATS 进行异步调用,但我不能 await
它。如何修改此方法,使其成为 "standard" 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
.
How do I modify this method so that I can make it a "standard" async method?
将对 Result
的所有调用替换为 await
:
Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
TableQuerySegment<T> segment = await querySegment;
编译器将从那里指导您。