【发布时间】:2018-06-27 00:13:02
【问题描述】:
显然我意识到它使我能够取消任务,但是这段代码无需将令牌传递到 Task.Run 即可达到相同的效果
有什么实际区别?谢谢。
Dim cts As New CancellationTokenSource
Dim ct As CancellationToken = cts.Token
Task.Run(Sub()
For i = 1 To 1000
Debug.WriteLine(i)
ct.ThrowIfCancellationRequested()
Threading.Thread.Sleep(10)
Next
End Sub)
cts.CancelAfter(500)
VS
Dim cts As New CancellationTokenSource
Dim ct As CancellationToken = cts.Token
Task.Run(Sub()
For i = 1 To 1000
Debug.WriteLine(i)
ct.ThrowIfCancellationRequested()
Threading.Thread.Sleep(10)
Next
End Sub, ct)
cts.CancelAfter(500)
【问题讨论】:
-
在这种情况下,它不会有太大的不同,但很可能
Task的上下文无法访问令牌分配给的原始变量。例如,如果对象 A 创建了一个执行对象 B 的方法的Task,B 可能不知道 A 的存在,那么它如何访问仅分配给 A 中的局部变量的CancellationToken?跨度> -
@jmcilhinney 好点,我也在想同样的事情。在非平凡的用例中更加通用。顺便说一句,你回答了我的很多问题,非常感谢你的帮助 jmcilhinney
标签: .net vb.net task task-parallel-library cancellation