c# - 远程对象上的 DynamicInvoke 是否异步工作?

标签 c# vb.net multithreading delegates remoting

我继承了一些我想在这里理解的主要意大利面条代码(组合 C#/VB)。

这似乎是一个非常奇怪的情况,其中有两个连续调用来触发远程对象的事件,这是通过调用委托(delegate)的 DynamicInvoke 方法来完成的,形式如下:

delegate1.DynamicInvoke(args1);
// some code here
delegate2.DynamicInvoke(args2);

delegate1 和 delegate2 都引用同一个远程“订阅者”对象中的方法。

根据我在 documentation 中可以阅读的所有内容, DynamicInvoke 看起来应该是同步的。但是我可以看到,当我在远程进程中设置断点时,delegate1 和delegate2 引用的方法正在运行。同时 ,在不同的线程中。

这是另一个微软“未记录的功能”吗?我应该预料到这一点吗?关于为什么会这样的任何解释?如果它打算异步运行,DynamicInvoke 怎么会有返回值呢?

谢谢!
绍尔

最佳答案

DynamicInvoke 绝对是一个同步操作。但问题是它指向的委托(delegate)不是同步的。例如,以下代码将以异步方式调用 Console.WriteLine()。

Action write = () => Console.WriteLine("foo");
Action del1 = () => { ThreadPool.QueueUserWorkItem(write); }
...
del1.DynamicInvoke();

del1 将同步执行,但会创建一个异步工作项。

我会寻找委托(delegate)正在执行的代码,看看他们是否在幕后做了一些 asyc 魔法。

关于c# - 远程对象上的 DynamicInvoke 是否异步工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/416564/

相关文章:

c# - 在 C# 中获取系统时钟更改滴答

c# - 服务停止后后台线程仍在监听 TCP 端口

.net - 从字符串中删除回车符

linux - 为什么我的两个线程不交错运行?

mysql LAST_INSERT_ID 带参数序列实现

c# - 在此目录中执行批处理文件

c# - 基于枚举值的样式

vb.net - DataGridView 标题对齐

c# - ASP.NET - C# 与 VB.NET - 间接差异和您最初可能不会考虑的事情

c# - 同步调用(通过调度程序)或直接调用的调用