为什么一个Task可以关联一个CancellationToken?
Why can a Task be associated with a CancellationToken?
有人可以解释为什么可以使用 CancellationToken 实例化任务吗?
明确地说,我在这里不是在谈论什么是 CancellationToken 以及它的用途,我的问题实际上是 «Task 使用可选提供的 CancellationToken 做什么?
var cts = new CancellationTokenSource();
Task.Run(() =>
{
while (true)
{
}
}, cts.Token);
cts.Cancel(); // This cancel will never cancel anything, so what can a task do with a CancellationToken?
Task.Run
的特定重载的文档明确而明确地指出:
A cancellation token that can be used to cancel the work if it has not yet started. Run(Action, CancellationToken)
does not pass cancellationToken
to action
.
任务不是“创建”或“关联”取消令牌。
所以它只是用作早点。如果您给 Task.Run
一个已经取消的令牌,则不会安排任何内容,并且会返回一个已经取消的任务。同样,如果它在任务准备就绪时被取消 运行,生成的任务将被取消。
.NET 中的取消始终是合作的,而不是抢先的:任务的功能负责在开始后检查令牌本身。
有人可以解释为什么可以使用 CancellationToken 实例化任务吗?
明确地说,我在这里不是在谈论什么是 CancellationToken 以及它的用途,我的问题实际上是 «Task 使用可选提供的 CancellationToken 做什么?
var cts = new CancellationTokenSource();
Task.Run(() =>
{
while (true)
{
}
}, cts.Token);
cts.Cancel(); // This cancel will never cancel anything, so what can a task do with a CancellationToken?
Task.Run
的特定重载的文档明确而明确地指出:
A cancellation token that can be used to cancel the work if it has not yet started.
Run(Action, CancellationToken)
does not passcancellationToken
toaction
.
任务不是“创建”或“关联”取消令牌。
所以它只是用作早点。如果您给 Task.Run
一个已经取消的令牌,则不会安排任何内容,并且会返回一个已经取消的任务。同样,如果它在任务准备就绪时被取消 运行,生成的任务将被取消。
.NET 中的取消始终是合作的,而不是抢先的:任务的功能负责在开始后检查令牌本身。