Vb.net 取消异步任务的其他方法

Vb.net 取消异步任务的其他方法,vb.net,multithreading,task,Vb.net,Multithreading,Task,我正试图找到最好的方法来做到这一点,但迄今为止我的任何尝试都没有奏效。寻找一些额外的输入 我有一个需要在后台执行的sub,是这样的 Sub Start_Work() 'Step 1 Sleep(1000) 'Step 2 Sleep(2000) 'Step3 Sleep(1000) 'Step 4 End Sub 我这样称呼它 Dim Task1 As Task Task1 = Task.Factory.StartNew(Sub() Start_Test()) 我看到的

我正试图找到最好的方法来做到这一点,但迄今为止我的任何尝试都没有奏效。寻找一些额外的输入

我有一个需要在后台执行的sub,是这样的

Sub Start_Work()

 'Step 1
 Sleep(1000)
 'Step 2
  Sleep(2000)
 'Step3
  Sleep(1000)
 'Step 4

End Sub
我这样称呼它

Dim Task1 As Task
Task1 = Task.Factory.StartNew(Sub() Start_Test())
我看到的所有取消任务的示例都使用for循环来持续检查取消令牌,但在这种情况下这有点困难

我正在考虑添加一个while循环和状态,但我不确定如何让代码在进入下一步之前等待一两秒钟

欢迎任何意见/建议。

您可以使用

ManualReset事件将允许您立即停止,而不是等待完全睡眠时间

在本例中,您将永远无法访问Console.WriteLine(“开始等待3”)


你看到了吗?你已经有答案了,为什么要悬赏呢?如果你想奖励答案,那是有悬赏理由的。@cybermonkey对不起,我没听懂?在我得到赏金之前,没有人回答。在悬赏之后,弗雷多用我需要的回答了这个问题。我会尝试一下,但我认为这不会解决我的问题。我的一个序列需要4秒的等待,但有可能我需要在2秒的时候取消整个过程。据我了解,这只会检查后等待?Nvm,谢谢!这正是我一直在寻找的,它工作得非常完美。要是我早点发现就好了!
Imports System.Threading
Imports System.Threading.Tasks

Module Module1

Dim mreWait As New ManualResetEvent(False)
Dim stopTask As Boolean

Sub Main()
    Dim task1 As task
    task1 = Task.Factory.StartNew(Sub() start_work())
    Console.WriteLine("waiting")
    Thread.Sleep(1500)
    Console.WriteLine("stop")
    stopTask = True
    mreWait.Set()
    Console.Read()
End Sub

Sub start_work()
    mreWait.Reset()
    Console.WriteLine("start wait 1")
    mreWait.WaitOne(1000)
    If stopTask Then Return

    Console.WriteLine("start wait 2")
    mreWait.WaitOne(1000)
    If stopTask Then Return

    Console.WriteLine("start wait 3")
    mreWait.WaitOne(1000)
    If stopTask Then Return

    Console.WriteLine("stop start_work")
End Sub

End Module