Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
.net 为什么可以在同一个委托实例上多次调用BeginInvoke?_.net_Multithreading_Begininvoke - Fatal编程技术网

.net 为什么可以在同一个委托实例上多次调用BeginInvoke?

.net 为什么可以在同一个委托实例上多次调用BeginInvoke?,.net,multithreading,begininvoke,.net,Multithreading,Begininvoke,我原以为在同一个委托实例上多次调用BeginInvoke会导致问题,但我尝试了一下,效果不错这是为什么? 与每个BeginInvoke一起返回的IAsyncResult对象是否称为唯一对象,而不是委托的每个实例 换句话说,我是否只需要委托的一个实例就可以生成对其函数的多个调用?您可能有多个线程调用同一个委托实例,例如,根据您希望它们都执行相同的任务。为什么它不起作用?每次调用它时,它都会开始在线程池线程上执行该委托的操作。是的,每个IAsyncResult都将独立于其他对象,表示异步操作 是的,

我原以为在同一个委托实例上多次调用
BeginInvoke
会导致问题,但我尝试了一下,效果不错这是为什么?

与每个
BeginInvoke
一起返回的
IAsyncResult
对象是否称为唯一对象,而不是委托的每个实例


换句话说,我是否只需要委托的一个实例就可以生成对其函数的多个调用?

您可能有多个线程调用同一个委托实例,例如,根据您希望它们都执行相同的任务。

为什么它不起作用?每次调用它时,它都会开始在线程池线程上执行该委托的操作。是的,每个
IAsyncResult
都将独立于其他对象,表示异步操作

是的,您只需要委托的一个实例。请注意,委托是不可变的-调用
BeginInvoke
不会更改其状态。您可以安全地复制一份委托引用,因为调用
delegate.Combine
etc将始终创建一个新的委托实例,而不是修改现有的委托实例。


每次调用
BeginInvoke
都将返回不同的
IAsyncResult
,可以按任何顺序传递到
EndInvoke


您可以使用同一个委托进行多个异步调用。

BeginInvoke
的每次调用都会触发对.net线程池的新请求

多次调用
BeginInvoke
是完全可以接受的。每个
IAsyncResult
对象对于对
BeginInvoke
的特定调用都是唯一的

只是要小心,确保您对每个
BeginInvoke
调用都进行匹配的
EndInvoke
,以确保资源得到清理

(请注意,每个调用不一定等同于一个线程。
BeginInvoke
将请求传递给线程池,如果池中的所有线程都已在使用,线程池可能会对请求进行排队。)