c# - QueueUserWorkItem() 和 BeginInvoke() 之间的区别是什么,用于执行不需要返回类型的异步事件

标签 c# multithreading delegates

根据我的 BeginInvoke()/EndInvoke() 问题,Delegate.BeginInvoke() 和使用 QueueUserWorkItem() 异步调用委托(delegate)之间在性能/其他方面是否存在重大差异?

最佳答案

我能想到的关于 QueueUserWorkItem 的主要事情是你必须使用 WaitCallback 委托(delegate)类型,如果你已经有一个 SomeRandomDelegate 实例和一些参数。好消息是你可以用闭包来解决这个问题:

ThreadPool.QueueUserWorkItem(
    delegate { someDelegate(arg1, arg2); }
);

此模式还确保您在编译时获得正确的强类型(不同于将 object 状态参数传递给 QueueUserWorkItem 并将其转换为目标方法)。直接调用方法时也可以使用此模式:

ThreadPool.QueueUserWorkItem(
    delegate { SomeMethod(arg1, arg2); }
);

显然,如果没有 EndInvoke 等效项,您也无法返回返回值,除非您在方法结束时调用方法/引发事件等...相关说明,需要注意exception handling .

关于c# - QueueUserWorkItem() 和 BeginInvoke() 之间的区别是什么,用于执行不需要返回类型的异步事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532791/

相关文章:

c# - 在 Task.Factory.StartNew 中暂停任务

c# - 使用/不使用 delegate() 启动线程

objective-c - NSTextField 的委托(delegate)问题

c# - LINQ 中的时区转换

c# - 处置后完成线程循环

c# - Task.Run 在同一线程上继续导致死锁

c# - 这个对象能够告诉它有多少属性不是空/空白/空有什么问题?

java - 使单个线程执行完成

java - 并发访问公共(public)字段。为什么可以观察到不一致的状态?

c# - 在分配给事件期间是否会复制委托(delegate)?