我正在创建一系列要在一天中的不同时间完成的任务。对于我创建的每个任务,我将它与CancellationTokenSource相关联。但是,调用PoolOfTasks(0).Token.Cancel()
似乎只是让任务立即执行而不是根本不执行。我希望完全放弃运行任务。
如果未取消任务,则应在指定的10秒延迟后执行。
这是我到目前为止编写的代码 - 当我取消CancellationToken时,我很困惑为什么仍然调用该方法(以及为什么在没有延迟的情况下调用它)。我可能误解了它们的概念。
Module Module1
Public Structure TaskCheckout
Public Token As CancellationTokenSource
Public Task As Task
Public TimeToCheckout As TimeSpan
End Structure
Private PoolOfTasks As New ObservableCollection(Of TaskCheckout)
Sub Main()
Dim Checkout As New TaskCheckout
With Checkout
.Token = New CancellationTokenSource
.TimeToCheckout = TimeSpan.FromSeconds(10)
.Task = Task.Delay(Checkout.TimeToCheckout, .Token.Token).ContinueWith(AddressOf methodToCall)
End With
PoolOfTasks.Add(Checkout)
Task.Delay(500)
PoolOfTasks(0).Token.Cancel()
Console.ReadKey()
End Sub
Private Sub methodToCall()
MsgBox("Hey!")
End Sub
End Module