处理任务延续的异步异常

时间:2013-09-06 16:14:01

标签: vb.net winforms visual-studio-2010 .net-4.0 task-parallel-library

我已经阅读了几篇关于在TPL中处理异步异常的文章,其中大多数建议使用async / await关键字和一个常规的Try / Catch块。我现在一直坚持使用VS-2010和.NET 4.0,所以我尝试了这段代码:

Imports System.Threading.Tasks

Public Class frmMain
  Private Sub frmMain_Load(sender As System.Object,
                           e As System.EventArgs) Handles MyBase.Load
    Dim t As New Task(AddressOf DoWork)
    Dim t2 As Task = t.ContinueWith(AddressOf MyExceptionHandler,
                                    TaskContinuationOptions.OnlyOnFaulted)
    t.Start()
  End Sub

  Private Sub MyExceptionHandler(t As Task)
    t.Exception.Handle(Function(e As Exception) True) 'ignore all exceptions
  End Sub

  Private Sub DoWork()
    Throw New Exception("Error happened")
  End Sub
End Class

如果我执行t.Start(),如上所述,它永远不会到达MyExceptionHandler,只会在DoWork中抛出未处理的异常。如果我改为呼叫t2.Start(),则永远不会调用DoWork。那我该怎么办?

注意:我不打算像这样留下我的生产代码,上面的代码示例只是我试图解决的问题的简化测试用例。在实际应用程序中,将正确处理异常。

0 个答案:

没有答案