我糊涂了。 怎么能一个或多个Task
并行地在一个单独的线程上运行? 我并行的认识显然是错误的。
MSDN的我不能绕到我的头位:
异步和等待关键字不会导致创建额外的线程。 异步方法不需要多线程,因为异步方法不会在自己的线程中运行。 该方法对当前同步上下文运行,并使用时间,只有当该方法是激活的线程上。
..和:
开始任务,等待它之间,你就可以开始其他任务。 其他任务并行运行含蓄,但创建额外的线程。
我糊涂了。 怎么能一个或多个Task
并行地在一个单独的线程上运行? 我并行的认识显然是错误的。
MSDN的我不能绕到我的头位:
异步和等待关键字不会导致创建额外的线程。 异步方法不需要多线程,因为异步方法不会在自己的线程中运行。 该方法对当前同步上下文运行,并使用时间,只有当该方法是激活的线程上。
..和:
开始任务,等待它之间,你就可以开始其他任务。 其他任务并行运行含蓄,但创建额外的线程。
他们不并行运行,他们轮流。 当被阻止运行任务的进展,它存储的状态,收益率控制到一个准备好的任务。 这是合作多任务,而不是真正的并行。
线程对样品原理。 不过也有,我想强调几个关键的不同之处。
首先,仅仅是因为async
/ await
是没有操作系统的线程:
其次,在行为差异:
async
/ await
使用合作多任务,Win32的线程使用优先购买权。 因此,它是必要的,所有的阻塞操作使用明确得到控制async
/ await
模式。 所以,你可以结束封锁整个线程,并通过使阻塞调用不写入产生功能的所有任务。 斯蒂芬在评论中指出,你可以在多个操作系统线程同时执行(连同所有的复杂性和潜在的竞争条件下),如果你使用一个多线程的同步上下文。 但MSDN报价大约在单线程上下文情况。
最后,在其他地方使用此相同的设计模式,你可以学到很多好的做法async
/ await
通过研究这些: