【发布时间】:2016-06-17 20:53:48
【问题描述】:
据我了解,C# 中的async/await 功能将await 调用之间的段拆分为在每个等待的方法返回到单独的工作线程后在调用线程上运行的回调方法。调用线程在等待期间是“空闲的”。回调必须通过某种事件循环安排在调用线程上。
此事件循环仅存在于 GUI 应用程序(如 Windows 窗体或 WPF)中。释放此循环可确保 UI 在长时间操作期间对其他用户交互保持响应。
控制台应用程序和 Web 应用程序 (ASP.NET) 没有此类事件循环,因此此回调机制不起作用。但是话又说回来,他们没有事件循环,因为他们不需要。没有用户在任何时候试图与正在运行的程序进行交互,期望立即得到反馈。所以没有必要为此释放调用线程。操作使用多少线程无关紧要,它只会在最后一位完成后返回。
那么async 和await 在控制台和网络应用程序中的用途是什么,或者任何一般的非交互式代码,例如 Windows 服务?与简单的同步调用相比,这有何不同或更高效?
我正在设计一个供 GUI 和非交互式(服务和 Web)程序使用的 API,并且很难理解它在非 GUI 环境中的行为方式。
【问题讨论】:
-
如果您不想在每个 IO 操作中使用一个线程,这仍然非常有用。如果处理得当,您可以通过异步处理数百个并发 IO 操作,而只需少量线程。
标签: c# .net multithreading async-await