当前位置: 代码迷 >> VB Dotnet >> [vb.net] Task的状态判断程序有关问题
  详细解决方案

[vb.net] Task的状态判断程序有关问题

热度:109   发布时间:2016-04-25 02:12:42.0
[vb.net] Task的状态判断程序问题
下面程序运行时怎么总是成功呢
我故意添加错误语句Throw New ArgumentException("Exception Occured")然后,看看
status1.IsCanceled ,status1.IsCompleted,status1.IsFaulted返回情况是否正确。
奇怪的是总是返回成功状态。  
我曾经用过Status的方法,但是不明白返回的各参数意味着什么


Imports System.Threading.Tasks.Task

Public Class Class2

    Sub MySub()

        Dim Dictionary1 As New Dictionary(Of Integer, Integer)


        Dim status1 As New Task(Sub()

                                    Try
                                        Throw New ArgumentException("Exception Occured")
                                        For index1 As Integer = 1 To 10000000
                                            Dictionary1.Add(index1, 0)
                                        Next

                                    Catch ex As Exception
                                        Exit Sub
                                        MsgBox(ex.Message.ToString)
                                    End Try
                                End Sub)
        Dim IfStatus1 As IAsyncResult = status1
        status1.RunSynchronously()
        status1.Wait()


        If status1.IsCanceled Then
            MsgBox("任务已被取消")
        ElseIf status1.IsCompleted Then
            MsgBox("任务成功完成")
        ElseIf status1.IsFaulted Then
            MsgBox("发生错误而失败")
        Else
            MsgBox("没有运行")
        End If

        MsgBox(Dictionary1.Count)
    End Sub

End Class



------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你都Try Catch截住了,Task怎么会知道现在到底在干嘛,你去掉就知道了。


没有运行时应该被识别为取消状态,但是这个不是这样。


Try Catch了,你的错误已经被Catch处理掉了,你试试在Task里直接引发一个非致命错误试试,比如CancelToken那个就是用的触发非致命错误来跳出任务的。


很奇怪。发生错误时中断继续执行,而是弹出错误捕获信息。



如果不是致命错误,你可以点“继续”来继续执行的
  相关解决方案