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

本文关键字:感觉 机制 线程 异步 等待 C#5 | 更新日期: 2023-09-27 18:20:26

为什么调用线程要进入异步方法,直到内部"等待"?

异步方法一被调用就产生一个线程,这不是更干净吗。这样您就可以确信异步方法会立即返回。您不必担心在异步方法的早期阶段不做任何昂贵的事情。

我倾向于知道一个方法是否会在"我的"线程上执行代码。不管是不是阻塞。这个模型似乎开启了一系列介于两者之间的可能性。

设计师们比我聪明得多,所以我相信有充分的理由,我只是想弄清楚。

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

异步方法一被调用就产生一个线程,这不是更干净吗。

"异步"方法的全部目的是避免生成新线程。

您混淆了异步和并发。异步方法不需要在另一个线程上运行即可实现异步。异步方法的要点是,它们允许您将工作分解为需要按特定顺序运行的小块,但不一定是,而无需在同一线程上执行其他工作

把线程想象成一个你可以雇佣的工人。把异步方法想象成一个待办事项列表,在项目之间有停顿。如果你的待办事项列表上写着"去商店,买牛奶和鸡蛋,回家,做煎蛋饼",那么异步的好处是,当有人在"买鸡蛋"answers"回家"之间打电话给你,说"你能在回家的路上顺便去药店拿我的处方吗?"你可以接电话,在做煎蛋之前安排工作。使用非异步方法,你的电话会一直响,直到煎蛋卷吃完,然后你接电话。UI会阻塞,直到你完成你正在做的事情。

你的概念是,为了保持UI线程的响应性,当你得到待办事项列表时,你就雇佣一些人来帮你跑去商店,这样你就可以自由地接听关于药房的电话那既昂贵又不必要使用async,所有东西都可以保持在同一个线程上,因为长时间运行的任务具有内置点,UI可以在这些点中断和安排更多的工作。

我喜欢把async..await看作是延续传递式编程的语法糖。

考虑到这一点,它与线程无关。

我倾向于知道一个方法是否会在"我的"线程上执行代码。

我认为这是一种特殊的愿望,并不是支持/反对任何功能的好论据。

async/await的要点是,用于启动异步操作和处理结果的代码可以保存在一个方法中。

如果没有它,您将被迫将逻辑上属于一起的代码分解为两部分。