Vb.net 取消异步任务的其他方法
我正试图找到最好的方法来做到这一点,但迄今为止我的任何尝试都没有奏效。寻找一些额外的输入 我有一个需要在后台执行的sub,是这样的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 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