如果并行任务抛出异常则取消任务

2023-12-14

我有两个共享相同取消令牌的并行任务,客户端要求两个结果列表,例如:

class ResponseDTO
{
    public IEnumerable<Entity1> Entity1List { get; set; }
    public IEnumerable<Entity2> Entity2List { get; set; }
}

这两个请求同时计算且相互依赖,因此如果其中一个列表没有结果,则无需等待另一个结果。

var cts = new CancellationTokenSource();
var token = cts.Token;

Task task1 = new Task(() =>
{
    //fetch Entity1 results into entity1List

    if (!entity1List.Any())
    {
        cts.Cancel();
    }
    else
    {
        responseDTO.Entity1List = entity1List;
    }
}, token);

Task task2 = new Task(() =>
{
    //fetch Entity2 results into entity2List

    if (!entity2List.Any())
    {
        cts.Cancel();
    }
    else
    {
        responseDTO.Entity2List = entity2List;
    }
}, token);

task1.Start();
task2.Start();

try
{
    Task.WaitAll(new[] { task1, task2 }, token);
}
catch (OperationCanceledException oce)
{
    return responseDTO;
}
catch (AggregateException ae)
{
    foreach (var ex in ae.InnerExceptions)
        //Log the exception
    return responseDTO;
}

return responseDTO;

如果任务返回空列表,则取消工作正常。

我的问题是:如果其中一个任务抛出一般异常,如何取消另一个任务?


通过@noobed 评论解决。

try
{
    //fetch Entity1 results into entity1List
}
catch
{
    cts.Cancel();
}

一般异常情况下会被catch,cts可以用cancel来调用。

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

如果并行任务抛出异常则取消任务 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • mvn 编译错误:打开 zip 文件时读取 jar 错误

    我有一个具有这些属性的 x 模块 模块名称 x datamodel 这是 pom xml 的一部分
  • 枚举单例如何发挥作用?

    以前我不使用枚举 而是这样做 public static ExampleClass instance public ExampleClass instance this public static ExampleClass getInsta
  • 反向工程 HTTP 请求

    我拦截了 Charles 上从 iPhone 到 Instagram 的 HTTP 请求 以下是标头 POST logging client events HTTP 1 1 Host graph instagram com Content
  • 使用 javascript 添加 ASP.NET 控件

    我想添加一个ASP label and ASP textbox通过Javascript控制页面
  • 使用树形图将嵌套单元格绘制为树:MATLAB

    我有一个代表树结构的复杂单元格 CellArray 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 我想用它来绘制代表树treeplot p 但我不知道如何构造数组
  • 当元素位于视口中时重新启动计数器动画

    此代码使计数器 动画在视图中启动 但我希望它在滚动到视图之外然后再次进入视图时重新启动 似乎无法解决 如果您想在此处查看实时链接 向下滚动到页脚之前的底部 https easyrecycle dk Serviceomraader html
  • Python 多处理

    我有一个包含二进制编码字符串的大列表 我之前曾在单个函数中处理过这些字符串 如下所示 just included this to demonstrate the data structure data np zeros 250 dtype
  • 正则表达式 javascript 最少 8 个字符,至少 1 个数字和 1 个特殊字符,最多 32 个字符 [重复]

    这个问题在这里已经有答案了 我想要一个正则表达式来检查 最少 8 个字符 至少一个数字和一个特殊字符 最多 32 个字符 我的正则表达式是 d a zA Z 0 9a zA Z 8 16 我测试这个正则表达式可以满意地工作 8 32 d 1
  • iTunes 中更新后的同一个应用程序

    我们要求对我们的应用程序的更新进行快速审查 以修复一个严重的错误 加急审核已获得批准 现在我们的 1 1 版本已经发布 而不是 1 0 版本 但应用程序是一样的 我们对应用程序所做的更改不在新版本中 我们有相同二进制文件的临时版本 并且在临
  • SQL 如果不为空则更新

    我有这个查询 UPDATE users SET username Param1 email Param2 PASSWORD Param3 WHERE id Param4 这是更新我的用户行 但我想说 如果电子邮件或密码不为空更新它们 否则就
  • 是否可以检索iPhone联系人记录的创建时间?

    我想问一个关于 iPhone 的问题 是否可以从每条记录的iPhone联系人中检索创建时间 谢谢 是的 你想要的kABPersonCreationDateProperty 请参阅参考 NSDateFormatter dateFormatte
  • og:image 和 og:url 应该放在 还是 中?

    For og image and og url 因为它们有 URL 我可以将它们放在link标签而不是meta标签 它是更好的吗 另外 使用这两个标签有什么区别 og image and og url 我不知道 OGP 的其他主要消费者 所
  • @QueryParam 正则表达式

    我正在使用 Jersey for Rest 并有一个接受的方法 QueryParam 但是 用户可以发送 QueryParam 像这样 contractName where 是 0 155 之间的数字 如何在 QueryParam 中定义它
  • WIF 配置:issuerNameRegistry 与证书验证

    在 Windows Identity Foundation WIF 4 5 配置中 以下各项之间的关系是什么issuerNameRegistry and certificateValidation 每个人都验证 SAML 2 0 断言的哪一
  • UIImage 到 UIColor 像素颜色数组

    我很抱歉问这个问题 但我不知道如何将 UIImage 表示为每个像素的 UIColor 数组 我已尽最大努力进行转换UIImagePNG JPEGRepresentation但无法得到想要的结果 这是一个 Swiftier 版本 Swift
  • 登录功能还是使用它的功能?

    Is it best 我知道没有灵丹妙药 但使用其中一种可能比另一种有一些优势 登录调用函数或调用它的函数 例子 方法一 module MongoDb let tryGetServer connectionString try let se
  • 将值从活动传递到广播接收器并从广播接收器启动服务

    我有一个活动 它包含一个按钮 其文本会动态更改 我想将此文本传递给接收短信的广播接收器 现在我的广播接收器应该接收文本 并根据文本启动或停止服务 这个怎么做 如果您的 BroadcastReceiver 是在单独的类文件中定义的 那么您可以
  • OpenAPI 和 spring-doc 未找到控制器类中的所有映射

    这有点奇怪 springdoc openapi ui v1 2 32 生成的文档仅包含控制器内的一些映射 Example Operation summary Foo description Foo PostMapping path v1 f
  • React.js - 兄弟组件之间的通信

    我是 React 新手 我想问一个策略问题 关于如何最好地完成必须在同级组件之间通信数据的任务 首先 我将描述一下任务 说我有多个
  • 如果并行任务抛出异常则取消任务

    我有两个共享相同取消令牌的并行任务 客户端要求两个结果列表 例如 class ResponseDTO public IEnumerable