为什么调用线程要走进异步方法,直到内部'await'?
一调用异步方法就立即产生一个线程,这不是更干净吗?这样您就可以确定async方法会立即返回。在异步方法的早期阶段,您不必担心不执行任何代价高昂的操作。
我倾向于知道一个方法是否会在'my‘线程上执行代码。不管它是不是阻塞。这个模型似乎开启了一系列介于两者之间的可能性。
设计师比我聪明得多,所以我相信这是有充分理由的,我只是想让我的大脑明白这一点。
发布于 2012-01-14 01:22:05
一调用异步方法就立即产生一个线程,这不是更干净吗?
“异步”方法的全部意义在于避免产生新的线程。
您混淆了异步和并发。异步方法不需要在另一个线程上运行即可成为异步方法。异步方法的要点是,它们允许您将工作分解为需要以特定顺序运行的小块,但不必在同一线程上执行其他工作。
把线程想象成你可以雇佣的工人。可以把异步方法想象成一个待办事项列表,两个项目之间有停顿。如果你的待办事项清单上写着“去商店,买牛奶和鸡蛋,回家,做一个煎蛋卷”,那么异步的好处是,当有人在“买鸡蛋”和“回家”的步骤之间打电话给你的手机,说“你能在回家的路上顺便去药店拿我的处方吗?”你可以在做煎蛋卷之前接电话和安排工作。使用非异步方法时,您的电话会一直振铃,直到煎蛋卷吃完,然后您才接听电话。用户界面会一直阻塞,直到你完成你正在做的事情。
你的想法是为了保持UI线程的响应性,一旦你得到待办事项列表,你就可以雇佣一些人来帮你跑到商店,这样你就可以自由地接听关于药店的电话。所有的东西都可以停留在异步的同一个线程上,因为长时间运行的任务有内置的点,UI可以中断并调度更多的工作。
发布于 2012-01-14 01:21:28
我喜欢把async..await看作是延续传递风格编程的语法糖。
考虑到这一点,它与线程无关。
发布于 2012-01-14 01:13:00
我想知道一个方法是否会在'my‘线程上执行代码。
我认为这是一种特殊的愿望,并不是支持/反对任何功能的好理由。
async/await的要点在于,启动async op和处理结果的代码可以保存在一个方法中。
如果没有它,你就不得不将逻辑上属于同一部分的代码分成两部分。
https://stackoverflow.com/questions/8854269
复制相似问题