async
-await
不会创建任何额外的线程,这是没有意义的,因为一台计算机一次不止做一件事情的唯一方法是
所以如果async
-await
这两者都没有,那么它如何使应用程序响应呢?如果只有一个线程,那么调用AnyMethod意味着在执行其他任何操作之前等待方法完成,而该方法中的方法必须等待结果才能继续执行。
发布于 2018-03-26 15:43:34
计算机一次做多件事情的唯一方法是(1)一次做多件事情,(2)通过调度任务并在它们之间切换来模拟它。所以如果异步等待没有这两个
记住,await
不是使同步代码神奇地异步。是为了让使用我们在调用异步代码时使用的编写同步代码的相同技术。等待是关于使使用高延迟操作的代码看起来像使用低延迟操作的代码,这些高延迟操作可能在线程上,它们可能在特殊用途的硬件上,它们可能将它们的工作撕成小块,并将其放入消息队列中,以便稍后由UI线程处理。他们在做某物实现异步,但是他们就是那些在做这件事的人。等待只是让你利用这个异步。
没有多CPU机器,也没有线程调度程序。你想同时运行两个Windows应用程序。多任务处理合作,操作系统告诉一个进程它可以运行,如果它的行为不正常,它会让所有其他进程都无法得到服务。不得不知道如何在下一次OS手动控制到它的时候找到它停止的地方。单线程异步代码非常类似,使用的是“等待”而不是“屈服”。
调用任何方法都意味着等待方法完成。
这就是异步的本质所在,一个方法返回,它返回一个任务,这意味着“这项工作正在进行中,当它完成时告诉我该做什么”。
https://stackoverflow.com/questions/-100004306
复制相似问题