什么是异步方法.我想我知道,但我一直把它与并行性混淆.我不确定异步方法和并行方法之间有什么区别.
使用线程类和异步类之间有什么区别?
编辑
一些代码演示异步,线程和并行之间的区别将是有用的.
Jon*_*Jon 21
当我们讨论可能冗长的操作时,异步方法会进入讨论.通常我们需要完成这样的操作以便有意义地继续执行程序,但是我们不希望在操作完成之前"暂停"(因为暂停可能意味着例如UI停止响应,这显然是不合需要的).
异步方法是我们调用以启动冗长操作的方法.该方法应该执行启动操作所需的操作并"非常快速"返回,以便不会出现处理延迟.
异步方法通常返回一个令牌,调用者可以使用该令牌来查询操作是否已完成以及其结果是什么.在某些情况下,他们将回调(委托)作为参数; 当操作完成时,将调用回调以通知调用者他们的结果已准备好并将其传回.这是一种常用的回调签名,虽然通常回调看起来像任何东西.
我在上面说过async方法启动了一个长度操作,但是"start"在这个上下文中是什么意思?由于该方法立即返回,实际工作在哪里?
在一般情况下,执行线程需要密切关注进程.因为它不是调用异步方法暂停的线程,谁呢?答案是,从托管线程池中为此目的选择了一个线程.
在这种情况下,我对"线程"的解释只是你明确地启动自己的线程并委托它来同步执行有问题的任务.该线程将阻塞一段时间,并且可能会在操作完成时发出"主"线程(可以继续执行)的信号.
这个指定的工作线程可能被拉出线程池(注意:不建议在线程池线程中进行非常冗长的处理!)或者它可能是您为此目的而开始的.
Eri*_*ert 15
首先,什么是方法,什么是线程?方法是一个工作单元,要么(1)执行有用的副作用,如写入文件,或(2)计算结果,如制作分形的位图.线程是执行该工作的工作者.
一种方法是同步的,如果为了使用的方法-让副作用或结果-你的线程必须做没有别的,从那里你要求的工作,直到它完成点完成点.
如果你的线程告诉方法它需要完成工作,方法是异步的,并且方法说"好的,我会这样做,我会在完成时给你打电话".
通常,异步方法的作用方式是它使另一个工作者 - 它从池中获取一个线程.如果该方法需要大量使用CPU,则尤其如此.但不总是; 没有要求异步方法旋转另一个线程.
那有意义吗?
假设您需要打扫房间,做饭并让孩子们上床睡觉.
同步:
你打扫房子,然后做饭,然后把孩子们放到床上.
平行:
你雇了3个人来打扫房子,做饭,让孩子们上床睡觉.但是你不相信他们所以要保持监督角色,看着他们并等待他们完成.只有当他们全部完成后才能获得报酬.
异步:
你一个孩子打扫房子,另一个孩子做饭.当每个人完成家务时,他们会把自己放在床上,而你却在电视机前放了一杯酒.