c# - 当从当前函数内部可见时,我是否应该将 CancellationToken 传递给 Task.Run()
问题描述
我在书中找到的测试取消令牌的代码。只是想知道,为什么token
作为参数传递给Task.Run()
. 根据我的理解,它是没有用的。我可以省略这个参数,代码将以同样的方式运行。我是正确的?
public static void testCancellationToken()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
Task task = Task.Run(() =>
{
while (!token.IsCancellationRequested)
{
Thread.Sleep(1000);
Console.Write("*");
}
token.ThrowIfCancellationRequested();
},token);
try
{
Console.WriteLine("press any key to stop task");
Console.ReadLine();
cancellationTokenSource.Cancel();
task.Wait();
}
catch (AggregateException e)
{
Console.WriteLine("got exception "+ e.InnerExceptions[0] );
}
}
解决方案
代码可能不会以完全相同的方式运行。如果您传递了取消令牌Task.Run
,如果取消令牌在任务进入线程池之前发出信号,任务调度程序将根本不会启动您的任务。
推荐阅读
- javascript - 与常量比较在javascript中的查找数组函数中不起作用,而与字符串直接比较有效
- javafx - JavaFX SceneBuilder 绑定对象属性
- php - 如何解决“权限被拒绝”和“无法移动” PHP 警告?
- lisp - 评估传递给在 lisp 中生成函数的宏的参数
- powerbi - 过滤时视觉总计与单个行的总和不匹配
- vala - 从方法返回接口
- javascript - javascript,如果值未定义,它会被忽略吗?
- c++ - 解引用指针并存储对指向数据的引用,然后获取引用地址并对其执行指针运算。C++
- ruby - 连接到 nil 应该在 Ruby 中返回 nil
- javascript - Javascript/Jquery:无法在角度中包含函数