CloudTable ExecuteQuery异步

时间:2014-01-31 17:44:46

标签: c# azure asynchronous azure-table-storage

是否可以异步运行ExecuteQuery?

请考虑以下代码:

public virtual MyEntity MyMethod(string parm1, string parm2)
{
     string queryString = TableQuery.CombineFilters(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, parm1),
                                                    TableOperators.And,
                                                    TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, parm2));
     TableQuery<MyEntity> query = new TableQuery<MyEntity>().Where(queryString);

     return TenantTnsTable.ExecuteQuery(query).ToList().FirstOrDefault();
}

是否可以将其作为异步方法并在ExecuteQuery调用上使用await?

2 个答案:

答案 0 :(得分:0)

试试Task.Run。您应该能够异步运行任何非异步代码,然后await结果。

答案 1 :(得分:0)

您可以使用Task.Factory.FromAsync包装旧样式回调。例如:

public static Task<TableQuerySegment<T>> ExecuteQueryAsync<T>(
        this CloudTable table,
        TableQuery<T> query,
        TableContinuationToken token,
        CancellationToken ct = default(CancellationToken))
        where T : ITableEntity, new()
    {
        ICancellableAsyncResult ar = table.BeginExecuteQuerySegmented(query, token, null, null);
        ct.Register(ar.Cancel);

        return Task.Factory.FromAsync<TableQuerySegment<T>>(ar, table.EndExecuteQuerySegmented<T>);
    }