并行编程 - 我需要一些澄清

Bil*_*ani 7 c# asp.net multithreading asynchronous c#-4.0

好吧,让我试着把它放在句子里......

让我们考虑一个例子,我创建一个async方法并用await关键字调用它,据我的知识告诉我,

  1. 主线程将被释放
  2. 在单独的线程中,异步方法将开始执行
  3. 一旦执行,指针将从最后一个位置恢复它留在主线程中.

问题1:它会回到主线程还是新线程?

问题2:如果异步方法是CPU绑定的还是网络绑定的,它会有什么不同吗?如果有,那是什么?

重要的问题

问题3:假设这是一个CPU绑定方法,我实现了什么?我的意思是 - 主线程已经发布,但同时,线程池中使用了另一个线程.重点是什么 ?

Ste*_*ary 9

async不会启动新线程.也没有await.我建议你阅读我的async介绍帖并跟进底部的资源.

async不是并行编程; 它是关于异步编程的.如果需要并行编程,则使用任务并行库(例如,PLINQ Parallel,或者 - 在非常复杂的情况下 - 原始Tasks).

例如,您可以使用一个async执行I/O绑定操作的方法.在这种情况下不需要另一个线程,也不会创建任何线程.

如果你有一个CPU绑定方法,那么你可以Task.Run用来创建一个Task在线程池线程上执行该方法的等待.例如,您可以await Task.Run(() => Parallel...);将某些并行处理视为异步操作.