某些System.Threading.Tasks.Task构造函数将a CancellationToken作为参数:
CancellationTokenSource source = new CancellationTokenSource();
Task t = new Task (/* method */, source.Token);
Run Code Online (Sandbox Code Playgroud)
令我感到困惑的是,从方法体内部无法实际获取传入的令牌(例如,没有什么比这样Task.CurrentTask.CancellationToken).必须通过某种其他机制提供令牌,例如状态对象或在lambda中捕获.
那么在构造函数中提供取消令牌的目的是什么呢?
我可以在执行任务操作期间获取CancellationToken传递给Task构造函数的内容.大多数样本看起来像这样:
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
Task myTask = Task.Factory.StartNew(() =>
{
for (...)
{
token.ThrowIfCancellationRequested();
// Body of for loop.
}
}, token);
Run Code Online (Sandbox Code Playgroud)
但是如果我的行为不是lambda而是放在其他类中的方法并且我没有直接访问权限token呢?唯一的方法是通过token国家?