同步调用和异步调用WebService
异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。
一:同步调用
一个同步操作会阻塞整个当前的进程,直到这个操作完成才能执行下一段代码
二:异步调用
不会阻塞启动操作的调用线程,调用程序必须通过轮流检测,或者等待完成信号来发现调用的完成
三:同步调用WebService
同步调用WebService就是我们平常的调用的写法
1:AsynCall.asmx的AsynCall.cs代码
/// <summary> /// 根据学生姓名得到该学生的成绩 /// </summary> /// <param name="strName">学生姓名</param> /// <param name="intDelaySecond">延迟的秒数</param> /// <returns>成绩</returns> [WebMethod] public int GetGrade(string strName, int intDelaySecond) { if (intDelaySecond > ) { Thread.Sleep(intDelaySecond * ); } int intGrade = ; switch (strName) { case "张三": intGrade = ; break; case "李四": intGrade = ; break; case "王五": intGrade = ; break; case "贾六": intGrade = ; break; } return intGrade; }
2:Program.cs
AsynCall.AsynCall service = new AsynCall.AsynCall(); Console.WriteLine("请输入要查询成绩的学生的姓名:"); string strName = Console.ReadLine(); Console.WriteLine("请输入要延迟的秒数:"); int intSecond = int.Parse(Console.ReadLine()); Console.WriteLine("同步调用开始"); Console.WriteLine("同步调用结果为:" + service.GetGrade(strName, intSecond)); Console.WriteLine("同步调用结束"); Console.ReadLine();
我们输入30秒看看运行效果
因为我们输入的是30秒,所以我们要等到30秒后才能输出“同步调用结果为:90”和“同步调用结束”这两句话
四:异步调用WebService
. .NET Framework为异步化的编程模型提供了必要的服务
. 决定特定的调用是否应该异步处理是由客户端也就是调用者决定,我们看到WebService本身并没有发生变化,发生变化的是客户端,是调用端
. 不需要进行额外的编程
. 代理类提供了WebService的方法名+Async()作为异步调用WebService的方法名
. 异步调用的实质是调用者线程和被调用者线程并行执行的过程
Console.WriteLine("异步调用开始"); //'+='表示事件的预定,'new AsynCall.GetGradeCompletedEventHandler(service_Completed)'表示利用编写的事件处理程序生成一个委托实例,'service.GetGradeCompleted'表示添加什么到产生事件对象的事件列表当中去,合起来解释就是把这个委托实例添加到产生事件对象的事件列表当中去,这个过程叫做订阅事件,委托就是代理,我们可以这样理解,委托就是把一个事件处理函数和一个事件关联起来 service.GetGradeCompleted += new AsynCall.GetGradeCompletedEventHandler(service_Completed); //开始异步调用 service.GetGradeAsync(strName, intSecond); Console.WriteLine("当前进程没有被阻塞"); for (int i = ; i < ; i++) { Console.WriteLine(i); } Console.ReadLine(); private static void service_Completed(object sender, AsynCall.GetGradeCompletedEventArgs e) { Console.WriteLine("异步调用结果为:" + e.Result); Console.WriteLine("异步调用结束"); }
我们同样输入30秒看看运行效果
因为我们输入的还是30秒,所以我们要等到30秒后才能输出“异步调用结果为:90”这句话,这是谁也改变不了的,但是和同步调用不同之处在于,“当前进程没有被阻塞”和for循环立即就输出了,所以证明你在延迟30秒的时候,我继续执行我下面的代码,你延迟你的我不管,我不等你,等你到猴年马月了,我继续做我的事情
相关文章
- 这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
- 这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要给大家介绍了关于c#中的WebService及其调用方式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 我们要明确,为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了...2020-06-25
- 方法一:直接调用复制代码 代码如下:<? /******************************************************************************/ /* 文件名 : soapclient.php /* 说 明 : WebService接口客户端例程 /****************...2014-06-07
- 这篇文章主要为大家详细介绍了C# 创建、部署和调用WebService的简单示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 下面小编就为大家带来一篇C# Soap调WebService的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了c#动态改变webservice的url访问地址,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了WebService 的简单封装接口调用方法,主要是通过简单的sql语句来查询数据库,从而返回dataset,十分简单实用,有需要的小伙伴可以参考下。...2020-06-25
- 这篇文章主要介绍了JAVA调用SAP WEBSERVICE服务实现流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-11
- c#编写webservice服务引用实例分享,大家参考使用吧...2020-06-25
- C#调用和实现WebService,纯手工打造! 需要的朋友可以参考一下...2020-06-25
- 本文主要用详细的图文给大家介绍C#创建、部署、调用WebService的全部过程以及中间需要避免的问题。...2020-06-25
- webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天我们来详细讨论下如何动态调用以及读取解析返回结果...2020-06-25
- 本文主要讲解ASP.NET中的Webservice的安全设置两种方法,一种基于soapheader,一种基于SoapExtensionAttribute,需要的朋友可以参考下。...2021-09-22
- webservice默认的返回为XML 要返回json可以用json工具类把对象转为json字符串,需要的朋友可以参考下...2021-09-22
- 本篇文章是对C#中委托的同步调用与异步调用进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了C#中的异步调用,对比同步调用分析了异步调用的原理及特点,并以实例形式给出了实现方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍PHP实现异步调用的4种方法,感兴趣的小伙伴们可以参考一下...2016-03-17
.NET中的async和await关键字使用及Task异步调用实例
这篇文章主要介绍了.NET中的async和await关键字使用及Task异步调用实例,本文还包含了取消执行和显示进度的例子,需要的朋友可以参考下...2020-06-25