同步调用和异步调用WebService

 更新时间:2015年09月28日 14:32:29   投稿:mrr  
本文给大家介绍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# WebApi 异常处理解决方案

    C# WebApi 异常处理解决方案

    这篇文章主要介绍了C# WebApi 异常处理解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • C#连接Informix数据库的问题

    C#连接Informix数据库的问题

    这篇文章主要介绍了C#连接Informix数据库的问题,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Unity UGUI 按钮绑定事件的 4 种方式汇总

    Unity UGUI 按钮绑定事件的 4 种方式汇总

    UGUI 可视化创建以及关联事件很方便, 动态创建可以利用创建好的 Prefab 进行实例化, 只是在关联事件上有些复杂,这篇文章主要介绍了Unity UGUI 按钮绑定事件的 4 种方式,需要的朋友可以参考下
    2022-01-01
  • 细说C#中的枚举:转换、标志和属性

    细说C#中的枚举:转换、标志和属性

    枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向大家具体讲解一下枚举的知识,需要的朋友可以参考下
    2020-02-02
  • unity 如何判断鼠标是否在哪个UI上(两种方法)

    unity 如何判断鼠标是否在哪个UI上(两种方法)

    这篇文章主要介绍了unity 判断鼠标是否在哪个UI上的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#使用ILGenerator动态生成函数的简单代码

    C#使用ILGenerator动态生成函数的简单代码

    这篇文章主要介绍了C#使用ILGenerator动态生成函数的简单代码,需要的朋友可以参考下
    2017-08-08
  • Winform窗体中打开PDF文件的三种方式

    Winform窗体中打开PDF文件的三种方式

    这篇文章介绍了Winform窗体中打开PDF文件的三种方式,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C# NetRemoting实现双向通信

    C# NetRemoting实现双向通信

    本篇文章主要介绍了C# NetRemoting实现双向通信,.Net Remoting 是由客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象来实现通信的
    2017-03-03
  • 浅谈C#基础之类的访问修饰符

    浅谈C#基础之类的访问修饰符

    浅谈C#基础之类的访问修饰符,需要的朋友可以参考一下
    2013-03-03
  • 浅析C# 委托(Delegate)

    浅析C# 委托(Delegate)

    这篇文章主要介绍了C# 委托(Delegate)的相关资料,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论