我有很多异步命令。我想写一个 try..catch
语句而不需要重复太多的代码。例如:
_fooCommand = new AsynchronousCommand( () => { action } );
_barCommand = new AsynchronousCommand( () => { action } );
AsynchronousCommand是一个类,它使用ThreadPool.QueueUserWorkItem((state) => { action() });
调用Action
。
当位于lambda内部时,try..catch
可以很好地工作:
_fooCommand = new AsynchronousCommand( () => { try.exception.catch } );
当外界不成立时:
try
_fooCommand = new AsynchronousCommand( () => {...} );
catch
未捕获异常。
编辑
我希望在使用command.DoExecute(this)执行命令时捕获异常,而不是在创建命令时捕获异常,并且如果可能的话,在lambda内部放置try..catch语句。
AsynchronousCommand
并不会立即调用该命令吗?因此外部的try/catch语句不可能起作用。话虽如此,看起来您想要使用async/await的语义,它按照您期望的方式传播异常--但是它们不能完全替代QueueUserWorkItem
,因为它可能或可能不利用线程。 - Kirk Woll