C#5异步/等待线程机制感觉不对?

Har*_*can 11 .net c# asynchronous c#-5.0

为什么调用线程会进入异步方法直到内部'await'?

一旦调用异步方法就产生线程不是更清晰.这样你就可以确定async方法立即返回.您不必担心在异步方法的早期阶段不做任何昂贵的事情.

我倾向于想知道一个方法是否会在'my'线程上执行代码.是否阻止.这种模式似乎打开了一系列中间可能性.

设计师比我聪明得多,所以我确信有充分的理由,我只是想了解它.

Eri*_*ert 38

一旦调用异步方法就产生线程不是更清晰.

"异步"方法的重点是避免产生新线程.

你混淆了并发性的异步性.异步方法不需要在另一个线程上运行就是异步的.异步方法的关键在于它们允许您将工作分解为需要以特定顺序运行的小部分,但不一定不在同一线程上执行其他工作.

将线程视为您可以雇用的工作者.将异步方法视为待办事项列表,并在项目之间暂停.如果您的待办事项清单上写着"去商店,买牛奶和鸡蛋,回家,做煎蛋",那么异步的好处就是当有人在"购买鸡蛋"步骤和"去"之间拨打您的手机时家里"一步而且说"你可以在回家的路上经过药房来接我的药方吗?" 你可以做煎蛋之前接听电话并安排工作.使用非异步方法,您的手机会一直响铃,直到煎蛋卷完成,然后您接听电话.UI阻止,直到您完成了正在进行的操作.

您的概念是,为了保持UI线程的响应性,当您获得待办事项列表时,您会雇佣一些人为您跑到商店,这样您就可以自由地接听有关药房的电话. 这是昂贵且不必要的. 所有东西都可以与异步保持在同一个线程上,因为长时间运行的任务具有内置点,UI可以中断并安排更多工作.

  • 对我来说,避免额外线程的性能成本甚至不是最引人注目的论点.它避免了我的核心代码在多个线程上运行的复杂性. (3认同)
  • @HarryMexican:如果你认为产生的线程"便宜",那么首先你可能不需要异步.我认为产生的线程非常昂贵*因此要不惜一切代价避免. (2认同)