在VB.Net中使用async / await和Task时捕获异常

时间:2018-01-31 21:21:36

标签: vb.net asynchronous exception-handling async-await task

我正在从vb.net解析来自Outlook的电子邮件。主窗体显示所选Outlook文件夹的邮件总数,并允许我覆盖此编号,以便我可以处理1,10或全部。当我单击一个按钮时,我打开一个新表单,将ref传递给我的outlook mailClient类,以提供对邮件项的访问。表单new和show事件设置事物并在try / catch中调用异步函数,如此。

    Try

    AllEMails = Await ScanMailItems(ref_clsEmailClient.ECFMailToScan,progressIndicator, tokenSource.Token)

    Catch ag As AggregateException

        If ag.InnerExceptions IsNot Nothing Then

            MsgBox(ag.InnerExceptions.Count.ToString)

            For Each ex In ag.InnerExceptions
                MsgBox(ex.Message)
            Next

        End If

    Catch ex As Exception

        MsgBox(ex.Message & vbNewLine & vbNewLine & _
               ex.StackTrace)

    End Try

在这个ScanMailItems()我正在设置For Each Next来循环邮件项目。

Dim EmailsFraction As Integer = Await Task(Of Integer).Run(
    Function()
        For i = ECFMailItems.Count To 1 Step -1
            'other code

             Throw New Exception("Test Error 1")
             UpdateFormDelegate()

             counter += 1
        Next
        Return counter
    End Function)

Return EmailsFraction

到目前为止的代码正在工作,并且在循环中我正在使用一些委托子更新控件来显示主题以及将在循环中解析的每封电子邮件的电子邮件正文。我的麻烦是我在for循环和委托子中放置了一些Throw New Exception("Test Error"),以确保它们会在我显示的事件中传播回我的try / catch。他们没有,我尝试过AggregateException。我可以发布实际代码,但认为异常是如何通过异步任务传播的。

我正在学习这样做,有没有更好的方法来设置它?最重要的是,在For循环的每次迭代中,我的进度条和其他控件需要更新,我将调用其他类。

0 个答案:

没有答案