当任务抛出异常而不等待终结器时如何使应用程序崩溃

2024-01-20

我们在 .Net 4(没有可用的异步等待)应用程序中使用任务,有时它们用于启动“Fire and Forget”操作,如下所示:

private void Test()
{
    Task task = Task.Factory.StartNew(() =>
    {
        throw new ApplicationException("Test");
    });
}

我们希望此异常在不等待任务的情况下使应用程序崩溃(否则将其放在任务中是没有意义的,至少在我们的场景中)并且不等待终结器,因为我们希望在发生意外错误时关闭应用程序避免状态损坏(我们正在保存异常发生时存在的状态)。

我的猜测是,我们应该以某种方式处理延续任务,但这会将延续代码放入另一个不会使应用程序崩溃的任务中,所以我被阻止在这里。

任何帮助将不胜感激

Edit:如果切换到线程池,结果就是预期的结果。以下代码使应用程序崩溃:

ThreadPool.QueueUserWorkItem((c) =>
{
    throw new ApplicationException("Test");
});

我终于找到了如何做到这一点,即使它有点复杂:

namespace ThreadExceptions
{
    using System;
    using System.Threading;
    using System.Threading.Tasks;

    public static class TaskExtensions
    {
        public static Task ObserveExceptions(this Task task)
        {
            return task.ContinueWith((t) =>
            {
                ThreadPool.QueueUserWorkItem((w) =>
                {
                    if (t.Exception != null)
                    {
                        foreach (Exception ex in t.Exception.InnerExceptions)
                        {
                            throw new TaskException(ex);
                        }
                    }
                });
            }, TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.PreferFairness);
        }
    }
}

这将使应用程序在没有等待任务的情况下崩溃。这就是我一直在寻找的。

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

当任务抛出异常而不等待终结器时如何使应用程序崩溃 的相关文章

  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • NoSuchBeanDefinitionException:没有合格的 bean 类型

    当调用我的 GET 请求 模式计算 时 我收到此错误 我不明白为什么 我的依赖项注入是正确的 org springframework beans factory NoSuchBeanDefinitionException No qualif
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内

随机推荐

  • Azure Web 作业 - 如何连接到 Azure MS SQL 数据库?

    我有一个发布到 Azure 的 MVC 网站 它使用 Azure SQL 数据库 现在我们需要运行计划任务来发送短信提醒 我的印象是 Azure Web Jobs 非常适合此任务 但在启动和运行它时遇到了一些问题 我已将控制台应用程序添加到
  • 寻找最接近 0 的数字

    我有一个整数数组 我需要找到最接近零的一个 正整数优先于负整数 这是我到目前为止的代码 public class CloseToZero public static void main String args int data 2 3 2
  • InnoSetup,在运行时更改 Uninstallable 属性行为?

    SCENARIO 我创建了一个安装程序 它将安装恶意软件应用程序以用于教育目的 该安装程序包含以下两个任务 Tasks Name hidden Description Hidden mode GroupDescription Install
  • pyqtgraph中设置背景颜色的问题

    我在 python 中使用 pyqtgraph 模块时遇到问题 当我将白色背景颜色放入 glscatterplot 时 散点就消失了 就像背景颜色添加到散点图的颜色中一样 因此一切都是白色的 这是我使用的一段代码 w gl GLViewWi
  • Gem 安装 therubyracer -v '0.11.4'?

    我几乎要疯狂地安装红宝石赛车手 我知道有很多人和我有同样的问题 我也看过这些问题 但对我来说太复杂了 因为不同的情况有不同的解决方案 而事实上 一直没有很好的办法来解决这个问题 我的问题类似于this https github com co
  • R中画圆

    我不知道为什么下面的代码没有给我完整的圆圈 而只给出了它的一部分 另外 我不知道如何在以 0 0 为中心且 r 1 和 a 2 的正方形内显示圆上或圆外的点 library plotrix n lt 1000 plot new frame
  • 如果启用 Nginx 拒绝规则,则下载 PHP 文件

    我的 Nginx 服务器已经运行了一年多 没有出现任何问题 它可以很好地为 WordPress 网站提供 HTML 和 PHP 文件 最近 wp login php 遭到了一些暴力攻击 因此我决定使用 Nginx 的拒绝所有规则来限制通过
  • 使用 pymongo 的 ReplicaSetConnection:有时会出现“IndexError:Cursor 没有这样的项目”

    我开始使用 pymongo 的 版本 2 2 1 ReplicaSetConnection 对象而不是 pymongo Connection 对象 现在 当我从数据库执行读取时 例如 if cur count 0 raise NoDocum
  • PHP PDO MySQL IN (?,?,?

    我想写一个MySQL语句 例如 SELECT FROM someTable WHERE someId IN value1 value2 value3 这里的技巧是我事先不知道 IN 中有多少个值 显然我知道我可以通过字符串操作生成查询 但是
  • s3 IAM 用户的 django-storages 需要什么权限?

    正如问题所问 锁定的 s3 IAM 用户成功使用 django storages 所需的最低权限是什么 目前我用过类似的东西 Statement Effect Allow Action s3 ListAllMyBuckets Resourc
  • django 休息错误 - AttributeError:模块“集合”没有属性“MutableMapping”

    我正在构建 Django 应用程序 它在我的机器上工作正常 但是当我在 docker 容器内运行时 它的休息框架不断崩溃 但是当我评论与休息框架的任何连接时 它工作正常 我的机器 Kali Linux 2021 3 码头机器 Raspber
  • 在父进程恢复执行之前等待所有子进程 UNIX

    在我的程序中 我在有限的 while 循环中分叉 并行 子进程 并对每个子进程执行 exec 我希望父进程仅在所有子进程终止后才恢复执行 while 循环之后的点 我该怎么做呢 我尝试了几种方法 在一种方法中 我让父进程在 while 循环
  • openorcreatedatabase 给出 nullpointerException

    我之前在我正在开发的 Android 应用程序中使用过数据库 所以通常我打开 数据库 当我的查询完成后 我再次关闭 它 随着我对数据库类的最新更改 我收到一个错误 给出以下痕迹 02 23 14 27 55 261 I webserver
  • 如何控制 maven-jetty-plugin 的 VM 参数?

    如何设置从 maven jetty plugin 运行的 Jetty 的 VM 参数 例如 我需要通过 Xmx由运行的 Jetty 参数mvn jetty run命令 环境变量MAVEN OPTS就是答案 MAVEN OPTS 的字符串内容
  • 从 Azure 发送电子邮件

    希望有人能帮忙 我想从我的 Azure 帐户发送电子邮件 我的域名已配置为可与 Azure 配合使用 我无法在网络上轻松找到如何从 Azure 帐户发送电子邮件 有人提到了 SendGrid 但我的帐户似乎不支持它 有人可以指导我如何从 A
  • 将 iso-639 代码翻译为语言名称的标准函数?

    我想应该有一些标准方法 以避免每个人为他们的应用程序重新输入乏味的常量 我正在寻找一个函数 可在 Linux 上的 php Web 应用程序中使用 它可以采用两个 ISO639 语言代码并返回名称first语言中的second语言 即foo
  • Android 以编程方式创建 SIP 帐户

    在我的应用程序中 我希望有一个 Activity 使用户能够在字段中添加他的 SIP 帐户参数 我不希望他们去 设置 gt 通话 gt 互联网通话设置 gt 添加帐户 gt 添加 我使用以下代码创建了具有活动的帐户 SipManager m
  • 通过 Terraform 创建的用户的轮换密钥

    我有一个由 Terraform 创建的 IAM 用户 密钥存储在 Hashicrop Vault 中 应用程序从那里读取它们 我已经开发了 ansible 代码 bash 脚本来成功地定期轮换密钥 但问题是 terraform 不喜欢旋转键
  • 获取完整二叉树中某一级别的所有节点,数组格式

    我需要从左子树或右子树获取完整二叉树中某个级别的所有节点 我目前从数据库中以数组形式检索二叉树 例如 1 2 3 4 5 6 7 代表一棵树 如下所示 1 2 3
  • 当任务抛出异常而不等待终结器时如何使应用程序崩溃

    我们在 Net 4 没有可用的异步等待 应用程序中使用任务 有时它们用于启动 Fire and Forget 操作 如下所示 private void Test Task task Task Factory StartNew gt thro