zoukankan      html  css  js  c++  java
  • c#异步编程

    C# 异步编程:  不需要等待,谁先出结果谁先出来

    1. 声明委托
    2. 根据委托定义实现方法
    3. 异步调用 :

    (1)     创建委托变量并指向具体方法(代表方法)

    **通过委托异步调用方法:

    *委托类型的BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法 

    异步调用的核心, BeginInvoke(多线程能执行的原因)。

    输入和输出变量:表式委托对应的实参。

    第二个参数(AsyncCallback callback):回调函数,表示异步调用后自动调用的函数。AsyncCallback是一个委托

    第三个参数(object asyncState):用于向回调函数提供参数信息。返回值:IasyncResult:异步操作状态接口,封装了异步执行中的参数。

    EndInvoke监视BeginInvoke。委托类型的EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。该方法知道异步调用的方法所有参数,所以,异步调用完毕后,取出异步调用的结果作为返回值。

    (2)     异步调用任务:

      IasyncResult result=委托变量.BeginInvoke(方法的参数,null,null)

             (3)同时执行其他任务(同步)

            (4)获取异步执行的结果

                   任务的类型  res=委托变量.EndInvoke(result);

                    EndInvoke()方法不断循环检测运算是否结束。

    总的思想:方法是通过委托变量的委托BeginInvoke()对象异步执行,EndInvoke()观察异步执行是否完

    小知识:在异步中当子线程没有完成让主线程等待的做法    主线程等待异步执行完成的三种方法      线程等待

    (1)result.AsyncWaitHandle.WaitOne(-1)//一直等到子线程结束   此时变成了同步

    (2)while(!result.IsCompleted)

    {

    Thread.Sleep(100);

    }

    (3)委托变量.EndInvoke(result);//主线程等待异步执行完成

  • 相关阅读:
    Filter的基本配置
    11.3、4(filter的生命周期和API)、
    11.1(过滤器概述)、(创建过滤器filter)
    10.6商品的促销活动,(未解决)
    php 调用常量或者变量的时候千万不能加引号""'' 不然不生效
    thinkphp5 if else的表达式怎么写?
    request() 获取参数是数组不是对象
    thinkphp5 PATHINFO路由正确的访问方式
    thinkphp5 的iframe文件怎么显示到html里面
    thinkphp5引入外部css js文件
  • 原文地址:https://www.cnblogs.com/wfaceboss/p/6372172.html
Copyright © 2011-2022 走看看