异步方法是什么意思?

本文关键字:意思 是什么 异步方法 | 更新日期: 2023-09-27 18:09:46

什么是异步方法。我想我知道,但我总是把它和平行度搞混。我不确定异步方法和并行方法之间的区别是什么。

使用线程类和异步类之间的区别是什么?

编辑

一些代码演示异步,线程和并行之间的区别将是有用的。

异步方法是什么意思?

什么是异步方法?

当我们讨论潜在的冗长操作时,就会讨论异步方法。通常,我们需要这样的操作完成,以便有意义地继续程序执行,但我们不想"暂停"直到操作完成(因为暂停可能意味着UI停止响应,这显然是不希望的)。 异步方法是用来开始冗长操作的方法。该方法应该执行启动操作所需的操作,并返回"非常快",这样就不会有处理延迟。

异步方法通常返回一个令牌,调用者可以用它来查询操作是否已经完成,以及操作的结果是什么。在某些情况下,它们接受回调(委托)作为参数;当操作完成时,将调用回调以通知调用者其结果已准备好并将其传递回去。这是一种常用的回调签名,当然,通常回调可以是任何形式。

那么到底是谁在执行这个冗长的操作呢?

我上面说过async方法开始一个长度操作,但是在这个上下文中"start"是什么意思呢?既然方法立即返回,那么实际的工作在哪里完成呢?

在一般情况下,执行线程需要监视进程。因为它不是线程调用异步方法暂停,谁呢?答案是,为此目的从托管线程池中挑选线程。

与线程有什么联系?

在这个上下文中,我对"线程"的解释很简单,就是你显式地启动一个你自己的线程,并委托它以同步的方式执行任务。这个线程将阻塞一段时间,并可能在操作完成时通知你的"主"线程(它可以自由地继续执行)。

这个指定的工作线程可能会从线程池中取出(注意:不建议在线程池线程中执行非常长时间的处理!),或者它可能是您为此目的而启动的线程。

首先,什么是方法,什么是线程?方法是一个工作单元,它要么(1)执行一个有用的副作用,如写入文件,要么(2)计算一个结果,如制作一个分形的位图。线程是执行该工作的worker

一个方法是同步的如果为了使用该方法——获得副作用或结果——你的线程必须从你请求工作完成的那一刻起不做任何其他事情

方法是异步如果你的线程告诉方法,它需要完成的工作,方法说:"好的,我会这样做,当它完成后我会打电话给你"。

通常异步方法的方法是创建另一个worker——它从池中获取一个线程。如果该方法需要大量使用CPU,则尤其如此。但并非总是如此;没有要求异步方法旋转另一个线程。

明白了吗?

说你需要打扫房子,做饭,哄孩子睡觉。 同步:

你打扫房子,然后做晚饭,然后哄孩子睡觉。

并行:

你雇了3个人打扫房子,做饭,哄孩子睡觉。但是你不信任他们,所以你要保持监督的角色,看着他们,等待他们完成任务。只有当他们全部完成后,他们才会得到报酬。

异步:

你让一个孩子打扫房子,另一个孩子做饭。当每个人都完成了自己的家务后,他们就上床睡觉了,而你则坐在电视机前,喝着酒,歇着脚。

首先你要明白,如果你想要并行,所有的结构都必须是并行的,我的意思是,如果你有一个异步方法,你需要异步调用。在web服务或web内容中,异步方法可以用异步的AJAX调用(这只是众多方法中的一种)。在一个方法中可以有多个线程,这是异步方法和多线程之间的关键区别。和主要:标准方法和异步方法的区别是,如果你让2调用标准方法在同一时间同一控制器与异步调用者(如AJAX)第二个调用将开始第一次调用时已经完成,如果你调用的方法是异步的调用将同时与多核服务器可以achiev电话(2)标准速度的两倍。