c# - 在没有 Wait() 的情况下使用 TPL 处理异常

标签 c# .net exception-handling task-parallel-library

我有一个带有“开始”和“停止”按钮的应用程序,以及一个在按下“开始”后在后台运行的线程。我为此使用 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/

相关文章:

error-handling - 使错误更常见于10月的cms

c# - RhinoMocks 单元测试回调函数 Func<T>

c# - 如何测试 MarshalByRefObject 是否有效?

c# - 在 C# 中使用 block 的别名

c# - 上传任何视频并在 .net 中在线转换为 .mp4

.net - 解析/使用来自 3rd 方依赖项的多个程序集版本

c++ - 崩溃处理程序打印回溯

python - 获取未从 Python 中的 NameError 定义的名称

c# - 什么时候在 Linq 中调用 OnValidate?

javascript - 使用 System.Web.Script.Serialization 从 C# 集合创建 JSON 数组