在延迟任务完成之前取消它

时间:2017-06-18 00:48:13

标签: vb.net asynchronous task token

我正在创建一系列要在一天中的不同时间完成的任务。对于我创建的每个任务,我将它与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

0 个答案:

没有答案