我感到困惑。一个或多个
“async”和“await”关键字不会创建额外的线程。异步方法不需要多线程,因为异步方法不在自己的线程上运行。该方法在当前同步上下文上运行,并且仅在方法处于活动状态时才使用线程的时间。
..还有:
在启动任务和等待它之间,您可以启动其他任务。其他任务隐式并行运行,但不会创建额外的线程。
Task
如何在单个线程上并行运行?我的理解显然是错误的。并行性的一些细节我无法理解,其中包括MSDN中的以下内容:“async”和“await”关键字不会创建额外的线程。异步方法不需要多线程,因为异步方法不在自己的线程上运行。该方法在当前同步上下文上运行,并且仅在方法处于活动状态时才使用线程的时间。
..还有:
在启动任务和等待它之间,您可以启动其他任务。其他任务隐式并行运行,但不会创建额外的线程。
async
方法在被阻塞的情况下会保存其状态并产生输出,此时需要使用await
。但如果它正在运行阻塞代码(例如Thread.Sleep
),则不会保存其状态和产生输出。 - Stephen Clearyawait SomeMethodAsync()
也不会创建一个新线程。只有当SomeMethodAsync创建一个新线程时(它并不一定会这样做),才会创建一个新线程。 - igrimpeTask
将在线程池上执行,并且除非您逐个await
每个Task
,否则将并行执行(在多个线程上)。 - Stephen Cleary