取消异步任务的替代方法

时间:2015-04-27 20:42:31

标签: vb.net multithreading task

我正在努力寻找最好的方法来实现这一目标,迄今为止我的尝试都没有奏效。寻找一些额外的输入。

我有一个需要在后台执行的子程序,就像这样

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循环和状态,但我不确定如何让代码等待一两秒才能进入下一步。

欢迎任何意见/建议。

1 个答案:

答案 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