Правильно отменить задание, запущенное с помощью Task.Factory.StartNew в VB.NET - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в использовании задач. Я должен использовать Task.Factory.StartNew, поскольку целевым Framework является 4.0 .

Читая некоторый пример (в C#), я сделал этот код:

 'Class is called from the main Form by:
 'Dim Flag As New TaskAct
' Flag.Main(Hwnd)

Ниже код не генерирует ошибок, но не работает

Public Class TaskAct

    Public Sub Main(Hwnd As String)

        Dim TokenSource As CancellationTokenSource = New CancellationTokenSource
        Dim Token As CancellationToken = TokenSource.Token

        Try
            Dim Tsk As Task = Task.Factory.StartNew(Sub()
                                                        Act(Hwnd) 'DOES SOME WORK
                                                    End Sub, Token)

            TokenSource.Cancel() 'IN ALL THE WEB EXAMPLES THIS CODE IS **OUT** THE ABOVE SUB

        Catch oce As OperationCanceledException
            Debug.Print(oce.ToString)
        Catch ex As Exception
            Debug.Print(ex.ToString)
        Finally
            TokenSource.Dispose()
        End Try
    End Sub

    Public Sub Act(hwnd As String)
    'SOME CODE HERE
    End Sub

 End Class

Приведенный ниже код отлично работает , но может быть и неправильным, поскольку НЕ похожие примеры, более того, я не могу избавиться от TokenSource

  Public Sub Main(Hwnd As String)

        Dim TokenSource As CancellationTokenSource = New CancellationTokenSource
        Dim Token As CancellationToken = TokenSource.Token

        Try
            Dim Tsk As Task = Task.Factory.StartNew(Sub()
                                                        Act(Hwnd)
                                                        TokenSource.Cancel() '**PUT INTO THE SUB WORKS!**
                                                    End Sub, Token)

        Catch oce As OperationCanceledException
            Debug.Print(oce.ToString)
        Catch ex As Exception
            Debug.Print(ex.ToString)
            'Finally                 
            '    TokenSource.Dispose()  'I MUST COMMENT OR I GET ERROR AT NEXT CALLS
        End Try

    End Sub

Где ошибка ?? Ty.

...