Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 远程对象上的DynamicVoke是否异步工作?_C#_Vb.net_Multithreading_Delegates_Remoting - Fatal编程技术网

C# 远程对象上的DynamicVoke是否异步工作?

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

我继承了一些主要的意大利面代码(C#/VB组合),我在这里试图理解它们

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

delegate1.DynamicInvoke(args1);
// some code here
delegate2.DynamicInvoke(args2);
delegate1和delegate2都引用同一远程“订户”对象中的方法

根据我在书中读到的所有信息,DynamicInvoke看起来应该是同步的。但是,当我将断点放入远程进程时,我可以看到delegate1和delegate2引用的方法在不同的线程中同时运行

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

谢谢!
Shaul

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

Action write = () => Console.WriteLine("foo");
Action del1 = () => { ThreadPool.QueueUserWorkItem(write); }
...
del1.DynamicInvoke();
del1将同步执行,但它将创建一个异步工作项


我会查找代理正在执行的代码,看看他们是否在幕后施展某种asyc魔法。

我的主要建议是仔细检查两个进程中的调用堆栈

您的“意大利面条”代码是否可能实际上包含回调。
您的第一个委托调用您的远程进程,它会回调,您的第二个委托正在从嵌套回调调用?

这是一个很好的猜测,但是没有,委托没有调用线程。远程对象有两个线程,每个线程都是委托代码本身的始发线程。