加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我们需要EndInvoke()来返回委托中异步调用的值?

发布时间:2020-12-15 18:16:31 所属栏目:百科 来源:网络整理
导读:我有点麻烦理解,当异步调用方法时,委托中的BeginInvoke()方法调用,在完成它的任务后为什么不能从BeginInvoke()本身返回方法的返回值,为什么我们需要EndInvoke()查询BeginInvoke()并从中返回返回值. 我知道这可能不是一个好的查询,但我的困惑是真实的:-) 另外
我有点麻烦理解,当异步调用方法时,委托中的BeginInvoke()方法调用,在完成它的任务后为什么不能从BeginInvoke()本身返回方法的返回值,为什么我们需要EndInvoke()查询BeginInvoke()并从中返回返回值.
我知道这可能不是一个好的查询,但我的困惑是真实的:-)

另外:我可以使用DelagateName.BeginInvoke(参数)异步调用一个方法,现在当委托中的匹配方法(假设它返回一个值)完成它的工作并返回一个值,为什么我需要DelegateName.EndInvoke()来获取返回值?为什么第一个调用本身不能在方法完成时返回值.

解决方法

当BeginInvoke返回时,该方法还没有完成 – 这就是异步的全部意义.因此,BeginInvoke只能在某个时刻为您提供表示结果“承诺”的标记 – 并且您使用该承诺使用EndInvoke获取实际结果,通常在回调中.

在.NET 4中,当然使用TaskTask<T>更加令人愉快地封装,但泛型不是.NET 1的一部分,因此对代表来说更复杂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读