C# 使用委托实现异步编程的四种方式

一、关于委托

1、委托概念:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递

     个人角色这个概念有些晦涩难懂,大家可以把委托当成一个方法的指针就好了,可以指向一个方法。或者通过(+=)的方式指向多个。

2、四种声明方式

1)直接用delegate

   public delegate int myDelegate(int x, int y);表示有两个参数,并返回int型。

   int 类型为 这个myDelegate委托的默认返回值类型。括号内的参数为,委托中的参数。可以理解为,这个委托指向的需要执行的方法的参数。

   比如像这个方法: public int sum(int a,int b)

         {

          int c=0;

          c=a+b;

         return c;

         }

2)Action 

   这个无返回值的泛型委托,但是可以有参数(最多16个参数)

   Action<int,string,bool> 表示有三个传入参数,类型分别为int,string,bool

3)Func

  有返回值的泛型委托

  Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

4)predicate

  固定返回bool型的泛型委托,且只有一个参数

   predicate<int> 表示传入参数为int 返回bool的委托

二、介绍BeginInvoke,EndInvoke

    1、建立一个委托对象,通过IAsyncResult BeginInvoke(string name,AsyncCallback callback,object state)异步调用委托方法,BeginInvoke方法除最后的两个参数外,其他参数都是与方法参数相对应的。

    2、利用EndInvoke(IAsyncResult--上一步BeginInvoke返回的对象)方法就可以结束异步操作,获取委托的运行结果。

  

三、实际异步执行中的使用方法

   主要使用BeginInvoke与EndInvoke,关于返回值使用IAsyncResult对象获取


1、delegate 

  首先要定义一个委托,名称为CouDelegate

返回值为bool,入参为 int 类型

1)public delegate bool CouDelegate(int a);

2)主函数中如下

CouDelegate cpd = new CouDelegate(你要执行的方法);

IAsyncResult result = cpd.BeginInvoke(a, null, null);


获取返回值这么写:

bool flag= cpd.EndInvoke(result);//如果主函数中调用EndInvoke,那么启用的这个线程会一直执行完毕后,获取返回值,再继续往下走(与串行一样,未起到异步作用)


2、Action

   Action a=myThreadMethod;//通过委托开启一个线程,委托指向myThreadMethod方法

   a.BeginInvoke(这里写myThreadMethod的参数);

3、Func

  Func<int, string,int> f = MyThread;   //入参为int,string,返回值为int(第三个参数为返回值类型)
  IAsyncResult ar=f.BeginInvoke(3,"str参数",null,null);//IAsyncResult可以获得当前线程的状态
  while (ar.IsCompleted == false)  //线程还没有结束(判断线程是否结束)
    {
      Console.Write(".");
      Thread.Sleep(100);     //休眠100ms(毫秒)即0.1秒;
      }
    int result = f.EndInvoke(ar);

4、predicate

  用法与Func差不多呢








  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值