ThrowIfCancellationRequested 似乎没有抛出任何异常

2023-12-11

我有以下代码:

CancellationTokenSource cts = new CancellationTokenSource();
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;

Task.Factory.StartNew(() =>
{
     if (Console.ReadKey().KeyChar == 'c')
         cts.Cancel();
     Console.WriteLine("press any key to exit");
});

 Parallel.ForEach(list, po, (algo) =>
 {
      algo.Compute(); // this compute lasts 1 minute  
      Console.WriteLine("this job is finished");       
      po.CancellationToken.ThrowIfCancellationRequested();
 });

The list含有很少的元素。 一切Compute当我按“c”时,方法已经启动。

当我按“c”时,不会引发异常。每个Compute方法继续执行直到其正常结束。

我想阻止/杀死所有剩下的人Compute当我按“c”时的方法。


取消不是这样的。这不像打电话Thread.Abort()立即终止线程。

对于序列中的每个元素,您的代码执行以下操作:

  1. Calls Compute() method
  2. 等待直到完成
  3. 向控制台写入有关完成的信息
  4. 检查是否请求取消并抛出OperationCanceledException如果它是。

为了取消某些任务,您需要通过CancellationToken到被调用的方法。
也许,值得将长时间运行的计算组织为一个周期,并检查每个步骤是否请求取消以便尽快停止它。

例如,在你的Compute()您可以像这样执行检查的方法:

private void Compute(CancellationToken ct)
{
    while (true)
    {
       ComputeNextStep();
       ct.ThrowIfCancellationRequested();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThrowIfCancellationRequested 似乎没有抛出任何异常 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 最后手段的性能优化策略[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 该网站上已经有很多性能问题 但我发现几乎所有问题都非常针对具体问题并且相当狭窄 并且几乎都重复了避免过早优化的建议 我们假设 代码已经可以正常工作了 所选择的算法对于问题的情况来
  • Java:枚举与整数

    在 Java 中使用标志时 我看到了两种主要方法 其中一个使用 int 值和一行 if else 语句 另一种是使用枚举和大小写切换语句 我想知道使用枚举与整数作为标志在内存使用和速度方面是否存在差异 Both ints and enums
  • C# 使用 varbinary 调整 jpg 图像大小,转换为字节并保存到数据库中

    我正在尝试调整使用 FileUpload 控件上传的 jpg 图像的大小 并将其转换为字节 然后将其保存到数据库 SQL Server 2008 作为 varbinary MAX 我所做的和下面显示的代码是我设法将其转换为字节并以 varb
  • 使用单词边界时如何忽略特殊字符

    s sopa sop sopaa sopii 如何忽略 使用单词边界时 re sub r b sop b sopa s 输出 sopa sop sopaa sopii 看来你想要这样的东西 gt gt gt s sopa sop sopaa
  • 允许在Excel中显示超过15位数字

    我正在编写一个简单的 VBA Excel 脚本 我遇到了一些问题 因为我使用这种方式删除了数字的科学格式 Columns b ad NumberFormat 0 但后来我意识到其中一列有 23 位数字 比 15 位数字长 因为我需要在 Ex
  • 验证日期时如何在jqgrid中使用monthNames?

    在我的 jqgrid 中 当我单击 添加新记录 时 我的日期字段已预先填充当前日期 日期的格式为 yyyy MMM d 例如 2010 Jan 23 日期是必填字段 当我单击提交按钮时 它验证失败并显示错误 表明该日期无效 并且需要 Y m
  • 如果现场评估失败,如何保持在同一选项卡上

    我有主页选项卡和验证选项卡 我喜欢验证用户输入 如果用户输入有效 则切换回主页选项卡 否则留在验证选项卡上 此时 在我单击提交按钮后 即使用户输入无效 它也会切换回主页选项卡 索引 xhtml
  • REGEX 用逗号分隔的唯一数字

    我正在尝试验证以逗号分隔的数字 1 31 的唯一列表 不重复 i e 2 4 6 7 1 是有效输入 2 2 6无效 2有效 2 无效 1 2 3 4 15 6 7 31有效 1 2 3 4 15 6 7 32 无效 20 15 3 I t
  • 连接设备列表中的闪烁选项不允许我调试任何应用程序

    我有一个奇怪的问题 当我尝试在连接的设备中部署应用程序时 我有一个闪烁的选项 出现一秒钟 然后消失 然后再次出现 依此类推 当我尝试在任何连接的或虚拟设备中调试应用程序时 我收到此错误 01 23 18 49 36 Launching ap
  • 用户注册时自动创建个人资料 (Laravel 5)

    我正在尝试为我的注册用户创建一个个人资料页面 在此页面上 将显示身份验证 用户数据 姓名 电子邮件 还会显示额外的个人资料信息 城市 国家 地区 电话号码等 我已经建立了一对一的关系 但我遇到了一个问题 创建用户后 我想自动为该特定用户创建
  • Apache websocket 重定向到 Tomcat:mod_proxy 和 mod_proxy_wstunnel

    我正在尝试使用 mod proxy 和 mod proxy wstunnel 模块将流量从 Apache 重定向到 Tomcat HTTP 流量重定向没有问题 但我无法使用迄今为止尝试过的任何配置成功重定向 websocket 流量 我正在
  • 从 Python 调用并执行 r 脚本

    我正在尝试使用此 Python 脚本来调用 r 脚本并运行它 r 脚本是 dbc2csv r 其代码位于 Python 块下方 我设法调用 r 脚本并打开 R studio 但代码没有像我希望的那样自动运行 我的感觉是有什么问题subpro
  • 滚动位置时显示 Div

    首先我想参考这个网站 http annasafroncik it 我喜欢动画进入视野的方式 在 jquery 中创建类似的函数很难吗 有没有什么插件可以实现这样的效果 希望有人能帮助我 基本上 您想要为每个要隐藏的元素添加一个 hideme
  • 有没有办法获得“numpy.linalg.svd()”代码

    由于 numpy linalg svd 是一个预定义函数 我没有找到它的内部代码 from scipy import linalg u s v np linalg svd b full matrices True import inspec
  • SetTimeout 递归函数(Javascript)超出最大调用堆栈大小[重复]

    这个问题在这里已经有答案了 我有一个递归 SetTimeout 函数 可以在加载过滤器后单击页面上的过滤器 它们是通过 Ajax 加载的 因此在页面加载时无法立即使用 scope clickFilter function var filte
  • 核心数据:提取是否必须访问持久存储?

    假设我这样做 NSManagedObjectContext context a managed object context NSString entityName an entity name NSFetchRequest request
  • 循环 UIScrollView 但继续减速

    我已经设置了一个无限滚动视图 当它达到 0 内容偏移量时 我将其设置为最大内容偏移量 反之亦然 i e scrollView setContentOffset CGPointMake 0 0 animated NO 这是可行的 但它会阻止
  • session.php 中 laravel 生命周期配置变量的最大可能值是多少

    默认情况下 laravel 会话会在两小时后过期 我知道这是为了安全起见 但我有一个网络应用程序 其中有一个移动应用程序 android webview 用户不断抱怨每次访问该应用程序时都需要登录 作为临时解决方案 我想知道如何将此变量设置
  • 从eclipse导出maven项目

    有没有办法从 eclipse 导出整个 Maven 项目 我不只是想要一个 jar 文件 我正在寻找一种方法 让其他人可以下载整个项目及其依赖项以及所有已经设置的内容 方式与我相同 只需复制项目文件夹并让其他人将其作为 现有 Eclipse
  • ThrowIfCancellationRequested 似乎没有抛出任何异常

    我有以下代码 CancellationTokenSource cts new CancellationTokenSource ParallelOptions po new ParallelOptions po CancellationTok