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

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(使用前将#替换为@)

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

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • “benaphores”值得在现代操作系统上实施吗?

    当我还是一名 BeOS 程序员时 我读过本文 http www haiku os org legacy docs benewsletter Issue1 26 html Engineering1 26作者 Benoit Schillings
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 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