【问题标题】:VB.NET Cancel execution of a long running, blocking method within a Task?VB.NET 取消任务中长时间运行的阻塞方法的执行?
【发布时间】:2018-01-28 07:36:36
【问题描述】:

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

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

【问题讨论】:

    标签: .net vb.net task cancellation


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多