我有一个异步方法,该方法在查询cosmos db容器后给我IEnumerable<T>
。
var count = (await myContainer.QueryAsync<int>(myQuery)).FirstOrDefault();
是否有一种(更整洁的)方式从该异步方法获取第一项,而没有整个放在括号中?像下面这样?
var count = myContainer.QueryAsync<int>(myQuery).Await().FirstOrDefault();
答案 0 :(得分:2)
使用以下扩展方法:
public async static Task<T> FirstOrDefaultAsync<T>(this Task<IEnumerable<T>> taskCollection) {
return (await taskCollection).FirstOrDefault();
}
您可以减少打扫电话
var count = await myContainer.QueryAsync<int>(myQuery).FirstOrDefaultAsync();
但这并不是使“用括号括起来的东西”消失。
答案 1 :(得分:1)
var result = await myContainer.QueryAsync<int>(myQuery);
var count = result.FirstOrDefault();
整洁。
没有无阻塞的方法可以省略await
(除了GetAwaiter()
很难看),您不能将其包装在扩展方法中,因为它也必须返回Task<IEnumerable<int>>
。最好的办法是将代码分成两个语句,使代码可读。