C# 远程对象上的DynamicVoke是否异步工作?
我继承了一些主要的意大利面代码(C#/VB组合),我在这里试图理解它们 这似乎是一种非常奇怪的情况,有两个连续的调用向远程对象触发事件,这是通过调用委托的DynamicInvoke方法完成的,其形式如下:C# 远程对象上的DynamicVoke是否异步工作?,c#,vb.net,multithreading,delegates,remoting,C#,Vb.net,Multithreading,Delegates,Remoting,我继承了一些主要的意大利面代码(C#/VB组合),我在这里试图理解它们 这似乎是一种非常奇怪的情况,有两个连续的调用向远程对象触发事件,这是通过调用委托的DynamicInvoke方法完成的,其形式如下: delegate1.DynamicInvoke(args1); // some code here delegate2.DynamicInvoke(args2); delegate1和delegate2都引用同一远程“订户”对象中的方法 根据我在书中读到的所有信息,DynamicInvoke
delegate1.DynamicInvoke(args1);
// some code here
delegate2.DynamicInvoke(args2);
delegate1和delegate2都引用同一远程“订户”对象中的方法
根据我在书中读到的所有信息,DynamicInvoke看起来应该是同步的。但是,当我将断点放入远程进程时,我可以看到delegate1和delegate2引用的方法在不同的线程中同时运行
这是微软的另一个“未记录功能”吗?我应该预料到这一点吗?有没有解释为什么会这样?如果它是异步运行的,那么DynamicVoke怎么会有返回值呢
谢谢!
ShaulDynamicInvoke绝对是一种同步操作。但问题是它指向的委托不是同步的。例如,下面的代码将以异步方式调用Console.WriteLine()
Action write = () => Console.WriteLine("foo");
Action del1 = () => { ThreadPool.QueueUserWorkItem(write); }
...
del1.DynamicInvoke();
del1将同步执行,但它将创建一个异步工作项
我会查找代理正在执行的代码,看看他们是否在幕后施展某种asyc魔法。我的主要建议是仔细检查两个进程中的调用堆栈 您的“意大利面条”代码是否可能实际上包含回调。
您的第一个委托调用您的远程进程,它会回调,您的第二个委托正在从嵌套回调调用?这是一个很好的猜测,但是没有,委托没有调用线程。远程对象有两个线程,每个线程都是委托代码本身的始发线程。