【发布时间】:2019-01-02 20:56:08
【问题描述】:
我过去曾在 C# 中详细查看过 async 和 await,包括查看我在该主题上找到的所有 StackOverflow 问题,但我从未实施过async 和 await 在代码中,原因如下:
- 我对主要性能优势的理解是,如果您有一个长时间运行的进程,然后是执行耗时的逻辑,然后是消耗由 first 长时间运行的进程返回的内容.我从来没有遇到过这种情况。我遇到过在初始长时间运行的进程和依赖于长时间运行的进程之间存在最小逻辑的场景,引入
await并没有足够的吸引力足够和async用于轻微的性能节省。引入异步调用会在执行顺序方面引入一定程度的复杂性,而对于小的性能提升,我一直觉得这种复杂性不值得 - 它只会让 async 代码更容易编写,而且我通常在前端使用 JavaScript(通常是 Angular)来完成我所有的异步工作,所以我从来没有识别出一个 令人信服需要在后端进行异步工作
我经常在工作面试中被问到我对async 和await 的理解,我可以回答这个问题,但是我从未完全了解或目睹过这样一个案例: async 和 await 显然是一段代码中更可取的模式。由于我没有使用async 和await 的习惯,因此我希望能够识别何时需要使用async 和await 的用例或场景。在系统中通常实现的引人注目的用例或场景的一个很好的实际示例是什么?
【问题讨论】:
-
我想到了异步 IO。
-
能够异步处理 Web 服务器中的请求可能是原因 #1。但这总结为前面提到的异步 IO
-
stackoverflow.com/questions/31185072/… stackoverflow.com/questions/25716366/… stackoverflow.com/questions/37877803/… stackoverflow.com/questions/17985726/… 可能值得一读。
and for small performance gains I've always felt that this complexity isn't worth it在某些情况下(如大型网站)绝对值得。 -
我们一定读过一些完全不同的东西......如何要求现实世界的场景“边界”要求验证一个倾向的意见?
-
感谢@bommelding,但是在阅读en.wikipedia.org/wiki/Asynchronous_I/O 时,异步 IO 的定义支持我对性能优势的理解是正确的。
标签: c# asynchronous async-await