Vb.net 如何停止/取消处理函数的任务或找到更好的方法?
我有Vb.net 如何停止/取消处理函数的任务或找到更好的方法?,vb.net,delegates,task-parallel-library,Vb.net,Delegates,Task Parallel Library,我有 Private Sub TestTask() Debug.Write("Running") For i As Integer = 0 To 60 Debug.Write(".") System.Threading.Thread.Sleep(1000) Next Debug.WriteLine("Finished") End Sub 但在VisualSudio上的调试窗口中,我的TestTask()将继续运行。。。。。请
Private Sub TestTask()
Debug.Write("Running")
For i As Integer = 0 To 60
Debug.Write(".")
System.Threading.Thread.Sleep(1000)
Next
Debug.WriteLine("Finished")
End Sub
但在VisualSudio上的调试窗口中,我的TestTask()将继续运行。。。。。请任何人启发我。谢谢您不需要/不需要两个任务-这是协同取消,因此在调用cancel时,您想要结束的每个任务都需要包含ThrowIfCancellationRequested(或者它应该如何处理取消)。故意没有线程。中止类型的行为/语义,都是协作的。CancellationToken的全部要点是,实际的工作者lambda(或函数)应该检查它,看它是否应该停止。在您的情况下,TestTask必须有权访问令牌,并在每次迭代后检查它。无需执行多个助手任务或任务状态检查或取消请求检查 上的MSDN文章介绍了lambda如何检查令牌,仅此而已 在您的情况下,TestTask可以用如下简单的代码响应取消:
Sub Main()
Dim cts As New CancellationTokenSource
Dim token = cts.Token
Task.Factory.StartNew(Sub() TestTask(token), token)
Thread.Sleep(3000)
cts.Cancel()
Console.ReadKey()
End Sub
Private Sub TestTask(token As CancellationToken)
Console.Write("Running")
For i As Integer = 0 To 60
token.ThrowIfCancellationRequested()
Console.Write(".")
Thread.Sleep(1000)
Next
Console.WriteLine("Finished")
End Sub
唯一需要做的是将令牌传递给TestTask,并按如下方式启动它:
Task.Factory.StartNew(Sub() TestTask(token), token)
我不懂。如果我想在TestTask()函数完成执行之前取消我的任务,我需要第二个任务,不是吗?我真正的问题是TestTask()函数可能会挂起而无法完成,因为它依赖于第三方,所以我需要一种停止其执行的方法。如果我只使用一个任务,则在请求取消任务后,该功能仍将继续。
Task.Factory.StartNew(Sub() TestTask(token), token)