我正在努力寻找最好的方法来实现这一目标,迄今为止我的尝试都没有奏效。寻找一些额外的输入。
我有一个需要在后台执行的子程序,就像这样
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循环和状态,但我不确定如何让代码等待一两秒才能进入下一步。
欢迎任何意见/建议。
答案 0 :(得分:2)
您可以使用manualresetevent来处理它
manualresetevent将允许您立即停止,而不是等待完整的睡眠时间
在此示例中,您永远不会到达Console.WriteLine("start wait 3")
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