我有点麻烦理解,当异步
调用方法时,委托中的BeginInvoke()
方法调用,在完成它的任务后为什么不能从BeginInvoke()本身返回
方法的返回值,为什么我们需要EndInvoke()
查询BeginInvoke()并从中返回返回值.
我知道这可能不是一个好的
查询,但我的困惑是真实的:-)
另外:我可以使用DelagateName.BeginInvoke(参数)异步调用一个方法,现在当委托中的匹配方法(假设它返回一个值)完成它的工作并返回一个值,为什么我需要DelegateName.EndInvoke()来获取返回值?为什么第一个调用本身不能在方法完成时返回值.
当BeginInvoke返回时,该
方法还没有完成 – 这就是异步的全部意义.因此,BeginInvoke只能在某个时刻为您提供表示结果“承诺”的
标记 – 并且您使用该承诺使用EndInvoke
获取实际结果,通常在回调中.
在.NET 4中,当然使用Task
和Task<T>
更加令人愉快地封装,但泛型不是.NET 1的一部分,因此对代表来说更复杂.
原文链接:https://www.f2er.com/csharp/98015.html