c# - 如何巧妙地解包异步方法的结果对象?

标签 c# async-await

我有一个异步方法给我 IEnumerable<T>在查询 cosmos db 容器之后。

var count = (await myContainer.QueryAsync<int>(myQuery)).FirstOrDefault();

有没有一种(更简洁的)方法可以从异步方法中获取第一项而不用整个括在方括号中?像下面这样的东西?

var count = myContainer.QueryAsync<int>(myQuery).Await().FirstOrDefault();

我严格don't want to use the GetAwaiter()

最佳答案

var result = await myContainer.QueryAsync<int>(myQuery);
var count = result.FirstOrDefault();

更整洁。

没有非阻塞的方式来省略 await (除了 GetAwaiter() 无论如何都很丑陋),你不能将它包装在扩展方法中,因为它还必须返回一个 Task<IEnumerable<int>>。 .您能做的最好的事情就是通过将代码分成两个语句来提高代码的可读性。

关于c# - 如何巧妙地解包异步方法的结果对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58970436/

相关文章:

c# - 如何在 C# 中使用 lambda 表达式进行嵌套 where 查询

c# - 检测客户端与 TCP/IP 断开连接的正确方法

c# - ZedGraph MajorGrid 和 MinorGrid LineStyle

C# async/await - 程序如何跟踪调用 "await"的位置?

c# - await Task<T> 和 Task<T>.Result 有什么区别?

javascript - Angular 1.5 && 异步/等待 && Jasmine 测试

c# - 使用 async/await 快速处理队列

c# - ProjectionTo 返回 ArgumentException : Argument types do not match

c# - 有什么想法可以缩短这段代码吗?

c# - 不抛出警告的 Task.Run 的替代方案