使用TPL处理异常而不使用Wait()

Arc*_*heg 11 .net c# exception-handling task-parallel-library

我有一个带有"开始"和"停止"按钮的应用程序,以及在按下"开始"后在后台运行的线程.我使用MVC和TPL.

我如何处理TPL中的异常,因为我从不调用Wait()方法?在任何异常我需要显示错误消息框,这个框应该在它被立即抛出后显示.

我总是在后台单线程,所以你不能在没有先前停止线程的情况下按下Start.

我正在寻找一些好的模式或最佳实践.我有一个想法,将try..catch放在线程内部,并在每个catch上调用一个事件,但我不确定这样的方法是否是好的架构决策

Nic*_*ler 24

如果您正在使用Tasks,则可以添加仅在抛出异常时才运行的延续.您还可以告诉它在您的UI线程上运行,以便您可以使用您的UI控件:

task.ContinueWith(
    t => { var x = t.Exception; ...handle exception... },
    CancellationToken.None,
    TaskContinuationOptions.OnlyOnFaulted,
    TaskScheduler.FromCurrentSynchronizationContext()
);
Run Code Online (Sandbox Code Playgroud)