同步调用和异步调用WebService

作者:mrr 时间:2022-11-27 07:10:03 

异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。

一:同步调用

一个同步操作会阻塞整个当前的进程,直到这个操作完成才能执行下一段代码同步调用和异步调用WebService

二:异步调用

不会阻塞启动操作的调用线程,调用程序必须通过轮流检测,或者等待完成信号来发现调用的完成同步调用和异步调用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秒看看运行效果

同步调用和异步调用WebService

因为我们输入的是30秒,所以我们要等到30秒后才能输出“同步调用结果为:90”和“同步调用结束”这两句话

同步调用和异步调用WebService

四:异步调用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秒看看运行效果

同步调用和异步调用WebService

因为我们输入的还是30秒,所以我们要等到30秒后才能输出“异步调用结果为:90”这句话,这是谁也改变不了的,但是和同步调用不同之处在于,“当前进程没有被阻塞”和for循环立即就输出了,所以证明你在延迟30秒的时候,我继续执行我下面的代码,你延迟你的我不管,我不等你,等你到猴年马月了,我继续做我的事情

  同步调用和异步调用WebService

标签:webservice,异步调用,同步调用
0
投稿

猜你喜欢

  • Android破解微信获取聊天记录和通讯录信息(静态方式)

    2023-03-05 04:27:31
  • c#数据绑定之linq使用示例

    2022-07-17 11:07:22
  • 继承JpaRepository后,找不到findOne()方法的解决

    2022-08-26 18:33:26
  • C#设计模式之工厂模式

    2023-07-10 13:43:33
  • C#开发的人脸左右相似度计算软件源码分析

    2023-08-26 05:18:41
  • java不可逆加密算法之md5加密算法使用示例

    2023-07-25 09:43:36
  • springboot中的pom文件 project报错问题

    2022-01-24 00:41:55
  • Java多线程之synchronized同步代码块详解

    2022-02-10 21:29:51
  • Spring Boot JPA如何把ORM统一起来

    2023-04-12 21:26:14
  • C#及WPF获取本机所有字体和颜色的方法

    2022-12-23 01:23:13
  • C语言近万字为你讲透树与二叉树

    2022-04-30 17:48:19
  • 浅析java 归并排序算法

    2022-01-20 09:59:50
  • Android中判断网络是否可用的代码分享

    2022-01-03 23:59:46
  • java处理数据库不支持的emoji表情符问题解决

    2021-08-21 00:16:58
  • java 代码块与静态代码块加载顺序

    2021-08-01 15:19:35
  • IntelliJ IDEA 如何配置git的操作方法

    2021-12-28 11:24:44
  • Java编程利用socket多线程访问服务器文件代码示例

    2023-10-11 15:36:37
  • 基于springboot实现redis分布式锁的方法

    2023-06-16 01:36:56
  • SpringBoot项目中使用Mockito的示例代码

    2023-09-25 22:31:14
  • Android MediaPlayer 播放音频的方式

    2021-09-07 07:27:09
  • asp之家 软件编程 m.aspxhome.com