c# - 如何尝试..catch ThreadPool.QueueUserWorkItem 代码

标签 c# exception threadpool

我有一堆异步命令。我想编写 try..catch 而无需太多重复。示例:

_fooCommand = new AsynchronousCommand( () => { action } );
_barCommand = new AsynchronousCommand( () => { action } );

AsynchronousCommand 是使用 ThreadPool.QueueUserWorkItem( (state) => { action() } ); 调用 Action 的类。

Try..catch 在 lambda 中运行良好:

_fooCommand = new AsynchronousCommand( () => { try.exception.catch } );

在外面的时候不在:

try
    _fooCommand = new AsynchronousCommand( () => {...} );
catch

没有捕获到异常。

编辑

我不想在创建命令时捕获异常:在使用 command.DoExecute(this) 执行它时,如果可能的话,将 try..catch 放在 lambda 中。

最佳答案

异常在抛出它们的线程上向上传播调用堆栈。因为命令在线程池线程上运行,所以它将与您的 try ... catch 在不同的线程上,因此它不会被捕获。

编辑:假设您实际上调用 try ... catch

中的命令

关于c# - 如何尝试..catch ThreadPool.QueueUserWorkItem 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22228755/

相关文章:

C# 将数据表转换为类

c# - 在 SignalR 中向除自身以外的所有客户端广播消息

java - 如何捕获一个库模块中任何未捕获的异常并发送应在另一库模块中接收的广播

windows - 从 Go 调用 NotifyIpInterfaceChange 导致访问冲突异常

javascript/jquery 错误 "invalid object initializer"

用于元组列表的 Python pool.map

java - 线程池执行器

Python 多处理 : How to know to use Pool or Process?

c# - MVC 4 - 报告服务和存储过程

c# - 关于 CLR 的 native 调用堆栈到底是什么?