同步Vs与Web服务相关的异步

时间:2013-07-26 04:22:37

标签: c# asp.net web-services asynchronous

我试图通过互联网找到一个很好的解释,说明同步通信与Web服务的异步通信之间的区别。但似乎即使是那些愿意为问题提供答案的人也会对此感到困惑。另一个答案就是答案完全相反。

如果有人能够用清晰的想法提供关于上述问题的差异的良好解释,那么对将来会遇到同样问题的每个人都会有所帮助。

4 个答案:

答案 0 :(得分:14)

异步服务

假设您有一个长期运行的Web服务(假设它从文件系统中读取一个大文件并进行一些处理)。

如果您将其设置为同步' Web服务(使用WCF定义),然后调用客户端必须等到处理完成,并且通常这将在处理完成时阻止其中一个asp.net工作线程。对于流量较大的服务,这可能会出现问题。

如果将其设置为异步Web服务,那么您所说的是您的代码将一些长时间运行的处理委托给另一个线程,或者使用非阻塞机制,并且这将返回在未来的某个时刻(如果您使用的是c#5.0,那么您可能需要查看async和await关键字的示例)。

对于该示例,可以使用其中一种异步ReadFile方法读取大文件。

这不会阻止其中一个asp.net工作线程,从而允许更大的吞吐量。

(当人们提到同时对同一服务进行多个同时调用时(通常是通过网页上的AJAX),通常会有一些混淆 - 而来自页面的调用通常是使用javascript中的异步机制进行的,这是与上面描述的不完全相同 - 我喜欢在我脑海中区分多个并行调用和异步调用)

异步调用

同样值得注意的是,即使该服务未设置为“异步”,您也可以对服务进行异步调用。这就是javascript中AJAX调用的方式,例如。

var jqxhr = $.ajax( "AnyService.svc" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });

alert("Called");

对于此示例,您可能希望看到“被调用的”'在“成功”之前显示,因为这不会等待服务在继续之前返回。您呼叫的服务不一定是异步的。

修改

正如评论中所指出的,您还可以让客户端调用“异步”'以同步方式提供服务(即服务不会阻止工作线程以获取进一步的请求,但客户端将在该方面阻止)。

答案 1 :(得分:6)

首先让您清楚地了解有关同步和异步的疑问

同步通信是通信器时间同步的直接通信。这意味着参与通信的所有各方同时在场。这包括但不限于电话交谈(不发短信),公司董事会会议,聊天室活动和即时消息。

异步通信不要求通信中涉及的所有各方同时出现。一些例子是通过手机发送的电子邮件,讨论板,博客和短信。在距离(特别是在线)教育中,异步通信是主要的(有时是唯一的)通信方法。通常,我们在每个类中使用不同的讨论板,每个讨论板都有自己的用途。

e.g。 的同步

当我打电话给你时,我拨打你的电话号码并等待你拿起电话。然后你说些什么,在同一时刻我会听你的。完成后,我会向您发送数据(与您交谈),并在您收到数据的同一时间(听我说)。在我们的沟通结束时,我们中的一个人说“转发结束”(再见),另一个说“Acknoledged”(再见)然后两个都响了。

<强>异步

我给你写了一封信。我把它放到邮局,它将被发送给你。与此同时,我不等待。我做了很多不同的事情。然后你收到了这封信。你读它的同时我还做了很多不同的事情。然后你给我写了一个答案然后发给我。在所有那些我没有参与的事情中。在第二天,我从系统(邮递员)获得(同步)消息(信号)。它(他)说:“这是给你的信息”。或者,我可以每隔五分钟轮询我的收件箱,检查是否有新信件。然后我暂停我的其他工作,收到你的来信并阅读你的答案。然后我按照这个答案做点什么。但这是你不会注意到的事情,因为你没有参与我对异步答案的处理。

礼貌:How does Synchronous and Asynchronous communication work exactly

答案 2 :(得分:1)

你对问题的解释不是很明确,但这可能会有所帮助: 在最基本的级别,同步通信是指与服务器的通信在发送其他资产的其他请求的同时发生的。例如,如果ajax调用是同步的,则会阻止其他资产下载。

异步通信是指通信独立于Web服务/页面中的其他资产。这种沟通更经常使用。

答案 3 :(得分:1)

同步 - 你正在打电话给朋友,他接听了电话并回复了你。 异步 - 您已经在他的手机上向您的朋友发送了一个文本,但您的朋友可能会立即回复,或者可能会在2天之后或之后10分钟回复。在这种情况下,您不希望朋友立即回复。