1
1
如果您谈论的是异步执行任务,最典型的模式是在线程中捕获异常,并在最终同步后重新触发它以等待任务完成。例如 IAsyncResult pattern 有一个BeginX(),EndX()调用结构,您可以在其中调用EndX()来阻止,直到完成。EndX()调用应该抛出异步操作中发生的任何异常,以便调用方可以决定如何处理它。 Task Parallel Library 广泛支持在执行异步任务时捕获甚至聚合异常,以便启动任务的客户端可以决定如何处理它们。 |
2
2
不知道你想用这个代码证明什么。只需为编写一个异常处理程序AppDomain.Current.UnhandledException未处理异常并记录或显示e的值。例外对象ToString(). 如果你真的在沉思 处理 例外的是,你有完全不同的一壶鱼要炒。你有一些代码在一个随机点运行和消亡。你不知道它进展到了什么程度,你的程序状态被这个线程改变了多少。处理异常需要恢复程序状态,撤消线程所做的任何操作。无论您编写什么样的事件处理程序来处理“it bombed”事件,都不可能猜到恢复状态需要做什么,因为它对线程的了解还不够。它只知道没用。恢复状态需要由线程本身完成。 处理“it bombed”事件本身就很困难。客户端代码甚至不能显示消息框,它将很容易消失在主窗口后面。不允许直接更新UI。调用需要封送到UI线程。最好的方法是让客户机代码决定如何通知它。这个FileSystemWatcher.SynchronizingObject房产是一个很好的模式。 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
rhymes · 如何让线程操作相同的java列表 2 年前 |