这是从Azure存储表(官方文档中的examples)中检索的通用方法。
"$(<"$filename")"
我正在参数列表中使用 public async Task<T> RetrieveOne<T>(string partitionKey, string rowKey, bool isAsync = false) where T : TableEntity
{
// To construct the query operation
TableOperation retrieveOperation = TableOperation.Retrieve<T>(partitionKey, rowKey);
// To execute the query
TableResult result;
if (isAsync)
{
result = await _table.ExecuteAsync(retrieveOperation);
}
else
{
result = _table.Execute(retrieveOperation);
}
// To parse the result
if (result.Result != null)
{
return (T)result.Result;
}
else
{
throw new Exception("The result retrieved is null");
}
}
来指示此方法是否异步。我做到了吗?
优势显而易见:可以轻松在isAsync
之间切换选项。
似乎这样的样式也将同步的(async
)包装到isAsync = false
中,但要付出额外的代价,因为单独执行任务也要花费时间。还有其他缺点吗?
答案 0 :(得分:4)
我会避免这种情况。简而言之,
await
进行传播注意:即使编写同一方法的async
和同步替代方法也是相当可疑的,它难以维护并且可能指向其他设计问题。
如果您真的想等待async
方法,请调用者执行,至少可以让他们选择是否需要包装它或适当地处理它