C# 委托和方法的异步调用(BeginInvoke)

委托和方法的异步调用

通过委托变量的BeginInvoke方法,可以从线程池中抓出一个线程异步执行委托方法。

//public delegate T2 AddDelegate(T x, T y);
// BeginInvoke()除了最后两个参数为AsyncCallback类型和Object类型以外,前面的参数类型和个数与委托定义相同
// 调用BeginInvoke()之后,需要保留IAsyncResult,以便在调用EndInvoke()时进行传递
IAsyncResult asyncResult = addDelegateWord.BeginInvoke(T t0, T t1, null, null );
// 用IAsyncResult分辨委托的调用,EndInvoke返回委托的返回值,
// 尽早使用BeginInvoke,在合适的时候使用EndInvoke(EndInvoke会等待线程池中的执行结果)
T2 outResult = addDelegateWord.EndInvoke(asyncResult);

如果需要在另一段代码获得返回值,可以通过AsyncResult获得委托对象addDelegateWord,再由addDelegateWord.EndInvoke获得返回结果。

AsyncResult的用途有这么几个:

  • 传递参数,它包含了对调用了BeginInvoke()的委托的引用;
  • 包含了BeginInvoke()的最后一个Object类型的参数;
  • 鉴别出是哪个方法的哪一次调用,因为通过同一个委托变量可以对同一个方法调用多次。
static T2 ONGetReturn(IAsyncResult asyncResult)
{
   
    // 先由IAsyncResult接口获得AsyncResult实例,因为只有AsyncResult才包含委托对象的引用
    AsyncResult result = (AsyncResult)asyncResult;
    // 由AsyncDelegate属性获得委托对象
    AddDelegate addDelegateWord = (AddDelegate)result.AsyncDelegate;
    // Return委托对象的返回值
    T2 res = addDelegateWord.EndInvoke
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值