gpt4 book ai didi

c# - Delegate.BeginInvoke()/EndInvoke() 实现

转载 作者:太空狗 更新时间:2023-10-30 00:44:25 25 4
gpt4 key购买 nike

我想知道 BeginInvoke/EndInvoke 方法是如何在委托(delegate)上实现的。我知道它们是由编译器自动生成的,有点特殊,所以反汇编程序无法处理它们。但最终是代码被执行了,对吧?出于某种原因,我无法在网上找到等效的 C#。你能帮我吗?

更新: 好的,我不能拥有它,因为它是非托管的东西(尽管我不明白它如何与绝对托管类的 ThreadPool 一起工作)。你能推荐一篇详细描述机制的好文章吗,因为它们中的大多数(如 this one)根本没有用。

最佳答案

这两个方法不是由 .NET 编译器生成的。如果您使用 .NET Reflector 或 ILDSAM,您将找不到这些方法的任何 MSIL 代码。它们实际上由 CLR 本身提供,因此实际上根本没有使用托管代码实现。

在较高级别,BeginInvoke 使用线程池中的线程来执行委托(delegate)。如果在执行过程中发生异常,那么它会被捕获并记住。当调用 EndInvoke 时,它​​将重新抛出任何记住的异常,如果没有,它允许您从委托(delegate)执行中获取结果。这就是它所做的所有有趣的事情。

关于c# - Delegate.BeginInvoke()/EndInvoke() 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com