我有一堆异步命令。我想编写 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/