异步方法意味着什么?

时间:2013-04-18 12:58:03

标签: c# asynchronous

什么是异步方法。我想我知道,但我一直把它与并行性混淆。我不确定异步方法和并行性之间有什么区别。

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

修改

一些代码可以证明异步,线程和并行之间的区别很有用。

4 个答案:

答案 0 :(得分:20)

什么是异步方法?

当我们讨论可能冗长的操作时,异步方法会进入讨论。通常我们需要完成这样的操作以便有意义地继续执行程序,但是我们不希望在操作完成之前“暂停”(因为暂停可能意味着例如UI停止响应,这显然是不合需要的)。

异步方法是我们调用 start 冗长操作的方法。该方法应该执行启动操作所需的操作并“非常快速”返回,以便不会出现处理延迟。

异步方法通常会返回一个令牌,调用者可以使用该令牌来查询操作是否已完成以及其结果是什么。在某些情况下,他们将回调(委托)作为参数;当操作完成时,将调用回调以通知调用者他们的结果已准备好并将其传回。 This是一种常用的回调签名,虽然通常回调看起来像任何东西。

那么谁真的进行了漫长的操作呢?

我上面说过async方法启动了一个长度操作,但是“start”在这个上下文中是什么意思?由于该方法立即返回,实际工作在哪里?

在一般情况下,执行线程需要密切关注进程。因为它不是调用异步方法暂停的线程,谁呢?答案是,从managed thread pool开始为此目的挑选一个主题。

与线程有什么联系?

在这种情况下,我对“线程”的解释只是你明确地启动自己的线程并委托它来执行有问题的任务同步。该线程将阻塞一段时间,并且可能会在操作完成时发出“主”线程(可以继续执行)的信号。

这个指定的工作线程可能是pulled out of the thread pool(注意:不建议在线程池线程中进行非常冗长的处理!)或者它可能只是you started用于此目的。

答案 1 :(得分:15)

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

方法是同步如果为了使用该方法 - 获得副作用或结果 - 你的线程必须从其他地方你要求完成工作直到它完成。

如果你的线程告诉方法它需要完成工作,那么方法就是异步,并且方法说“好的,我会这样做,我会打电话给你,当它是完成”。

通常异步方法的方式是使另一个工作者 - 它从池中获取一个线程。如果该方法需要大量使用CPU,则尤其如此。但不总是;没有要求异步方法会旋转另一个线程。

这有意义吗?

答案 2 :(得分:7)

说你需要打扫房子,做饭,让孩子们睡觉。

同步:

你打扫房子,然后做饭,然后让孩子们睡觉。

并行:

你雇了3个人来打扫房子,做饭,让孩子们上床睡觉。但是你不相信他们所以要保持监督角色,看着他们并等待他们完成。只有当他们全部完成后才能获得报酬。

异步:

你有一个孩子打扫房子,另一个孩子做饭。当每个人完成家务时,他们会把自己放在床上,而你却在电视机前放了一杯酒。

答案 3 :(得分:1)

首先你必须明白,如果你想要并行,所有结构都需要是并行的,我的意思是如果你有一个异步方法,你需要一个异步调用。 在webservices或web中,异步方法可以是(使用AJAX调用的多种方法之一),它是异步的。在一种方法中,您可以拥有多个线程,这是异步方法和多重线程之间的关键区别。 主要:标准方法和异步方法之间的区别在于,如果您使用异步调用者(如AJAX)同时向同一个控制器调用标准方法,则第二次调用将在第一次调用时开始call已经完成,如果你调用的方法是异步的,则两个调用将同时开始,使用多核服务器可以达到标准速度的两倍(2个调用)。 并行度的速度由law测量。