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

前端之家收集整理的这篇文章主要介绍了c# – 为什么我们需要EndInvoke()来返回委托中异步调用的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点麻烦理解,当异步调用方法时,委托中的BeginInvoke()方法调用,在完成它的任务后为什么不能从BeginInvoke()本身返回方法的返回值,为什么我们需要EndInvoke()查询BeginInvoke()并从中返回返回值.
我知道这可能不是一个好的查询,但我的困惑是真实的:-)

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

解决方法

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

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

猜你在找的C#相关文章