3 回答
TA贡献1757条经验 获得超8个赞
计算机一次出现多于一件事的唯一方法是(1)实际上一次做多于一件事,(2)通过调度任务和在它们之间切换来模拟它。因此,如果async-await没有这些
这并不是说等待确实没有这些的。请记住,目的await
不是使同步代码神奇地异步。这是为了在调用异步代码时使用我们用于编写同步代码的相同技术。等待是关于使用高延迟操作的代码看起来像使用低延迟操作的代码。这些高延迟操作可能在线程上,它们可能在特殊用途的硬件上,它们可能会将它们的工作分解成小块并将其放入消息队列中以供稍后由UI线程处理。他们正在做一些事情以实现异步,但他们是那些正在做的人。等待只是让你利用这种异步。
另外,我认为你缺少第三种选择。我们老人们 - 今天有说唱音乐的孩子应该从我的草坪上下来等 - 记住20世纪90年代早期的Windows世界。没有多CPU机器也没有线程调度程序。你想同时运行两个Windows应用程序,你必须屈服。多任务是合作的。操作系统告诉进程它会运行,如果它不正常,它会使所有其他进程无法服务。它一直运行直到它产生,并且不知何故它必须知道如何在下次操作系统控制回到它时它停止的地方。单线程异步代码非常类似,使用“await”而不是“yield”。等待的意思是“我要记住我在这里离开的地方,让其他人跑了一会儿;当我等待的任务完成时,给我回电话,我会在我离开的地方接我。” 我认为你可以看到它如何使应用程序更具响应性,就像在Windows 3天中一样。
调用任何方法意味着等待方法完成
有你失踪的钥匙。 方法可以在其工作完成之前返回。这就是异步的本质。一个方法返回,它返回一个任务,意味着“这项工作正在进行中;告诉我完成后该做什么”。该方法的工作尚未完成,即使它已经返回。
在await运算符之前,你必须编写看起来像spaghetti穿过瑞士奶酪的代码,以处理我们在完成后有工作要做的事实,但返回和完成失去同步。Await允许您编写看起来像返回和完成同步的代码,而不会实际同步它们。
- 3 回答
- 0 关注
- 693 浏览
添加回答
举报