VB.NET取消在Task中执行长时间运行的阻塞方法?

时间:2018-01-28 07:36:36

标签: .net vb.net task cancellation

我正在尝试取消包含长时间运行的阻塞方法调用的任务。我的问题是,在长时间运行的操作完成之前,执行不会返回给调用者。 (即使它被取消了。)

Public Class DebugForm
    Private Sub DebugForm_Load(sender As Object, e As EventArgs) Handles Me.Load    
        Dim cts As New CancellationTokenSource
        Task.Run(Sub()
                     DoLongRunningBlockingWork()
                     cts.Token.ThrowIfCancellationRequested()
                 End Sub, cts.Token)
        'Simulate cancelling after a second.
        Threading.Thread.Sleep(1000)
        cts.Cancel()
    End Sub

    Private Sub DoLongRunningBlockingWork()
        Threading.Thread.Sleep(30000)
        Debug.WriteLine("Completed")
    End Sub

End Class

1 个答案:

答案 0 :(得分:0)

你必须检查在该状态下长时间运行的进程的状态,你将能够返回给调用者。 每个进程都包含与进程关联的堆栈,堆栈由状态变量组成,您可以通过该状态变量查看进程的状态。