gpt4 book ai didi

c# - 在 MulticastDelegate 上调用 BeginInvoke?

转载 作者:太空狗 更新时间:2023-10-29 17:52:34 26 4
gpt4 key购买 nike

根据 Jon Skeet , "您只能在具有单个目标调用的委托(delegate)上调用 BeginInvoke。"

这是为什么呢?真正的原因是什么?

注意:为了澄清(并且因为我犯了这个错误),我说的是委托(delegate)上的 BeginInvoke,而不是控件上的。

最佳答案

我认为 Jon Skeet 在您链接的帖子中做了很好的解释:

How do you want the threading to work? Do you have to run each invocation synchronously, but run the whole thing asynchronously with respect to the calling thread, or could you run each invocation asynchronously?

If it's the former, just run a single threadpool work item which calls the delegate synchronously. If it's the latter, get the invocation list with Delegate.GetInvocationList and call BeginInvoke on element of the list in turn.

基本上在 MulticastDelegate 上调用 BeginInvoke 是不明确的,您是否希望委托(delegate)相互等待?虽然理论上它可以为您做出决定,但已做出选择以强制您通过以不同方式调用委托(delegate)来明确选择所需的方法。

换句话说,这是一种避免混淆的设计选择。同样重要的是要注意 BeginInvoke 已经失宠,并且可以使用更新的异步编程方法,因此不太可能更新这个旧标准,所以即使他们现在想改变,也没有理由这样做。

关于c# - 在 MulticastDelegate 上调用 BeginInvoke?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258859/

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