异步WhenAll的精确线程

时间:2018-03-15 15:16:28

标签: c# multithreading asynchronous

如果我在循环中多次调用异步方法而不等待,并将任务保存到列表中,然后我以相同的方法将其提供给WhenAll,这个场景中的确切线程故事是什么?

说,我们正在发出HTTP请求。在I / O(准备请求)之前我的方法的同步部分将在原始线程上顺序运行。等待HTTP调用完成将对所有请求并行发生,而原始线程将继续运行,直到它到达WhenAll语句。然后(假设I / O仍然未决)原始线程将被释放到线程池。

我的问题是,在此之后会发生什么?当I / O完成每个任务时,哪些线程将运行异步方法中的其余代码(假设它的所有常规同步代码,例如处理HTTP响应)?

  1. 将继续在自己的线程上并行运行,取自线程池或
  2. 他们会在一个帖子上一个接一个地运行吗?或
  3. 方法内部的延续会在多个线程上运行,而WhenAll在一个线程上运行后会继续吗?
  4. 我希望这是第2选项,但我想知道。

0 个答案:

没有答案