我有一个带有“开始”和“停止”按钮的应用程序,以及一个在按下“开始”后在后台运行的线程。我为此使用 MVC 和 TPL。
我从不调用 Wait() 方法,如何处理 TPL 中的异常?在任何异常情况下,我都需要显示错误消息框,并且该框应该在它被立即抛出后显示。
我一直在后台运行单线程,所以你不能在没有事先停止线程的情况下按开始。
我正在寻找一些好的模式或最佳实践。我有一个想法将 try..catch 放在线程中,并在每次捕获时调用一个事件,但我不确定这种方法是否是好的架构决策
最佳答案
如果您正在使用 Tasks
,您可以添加一个仅在抛出异常时才运行的延续。您还可以让它在您的 UI 线程上运行,以便您可以使用您的 UI 控件:
task.ContinueWith(
t => { var x = t.Exception; ...handle exception... },
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext()
);
关于c# - 在没有 Wait() 的情况下使用 TPL 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8714235/