我一直在学习异步/等待的使用,并且我认为我已经理解了其背后的概念。然而,大多数 Channel 9 教程、MSDN 文章和 Stack Overflow 答案都是使用基于 GUI 的应用程序(Windows Forms 应用程序)来展示异步/等待的强大功能。
然而,在基于 UI 线程的应用程序与常规的线程池线程应用程序(例如 ASP.NET Web 应用程序、控制台应用程序等)中,我注意到异步/等待的使用存在根本性的差异。
由于在基于 UI 线程的应用程序中,UI 线程始终可用(除非进程被显式地停止或由 Windows 停止),因此负责执行任何异步方法中“等待”之后代码的线程池线程将保证找到 UI 线程以将结果返回(如果有的话)。
然而,在控制台应用程序或 ASP.NET Web 应用程序中,主线程(在控制台应用程序中)或 HTTP 请求(在 ASP.NET Web 应用程序中)必须等待(在某个时刻)直到所有异步操作完成。因此,如果没有其他工作要处理,异步方法调用后应该有 .Wait() 和 .Result 调用。
我的理解是否正确?我并不质疑异步对于 I/O 绑定或网络绑定操作的好处(我理解它将如何增加应用程序的可扩展性)。
async
和await
关键字不会导致创建额外的线程。 - GSergWait
/Result
。 - Alexei Levenkov