Windows 服务、阻塞收集和多线程问题

2024-04-18

我的场景:

  • Windows 服务 .NET 4
  • 我轮询数据库中的实体。
  • 当新实体进来时,它们会被添加到BlockingCollection.
  • 在服务的OnStart我创建一个System.Threading.Tasks.Task他的工作是枚举BlockingCollection (using GetConsumingEnumerable()).

我遇到的问题是这样的:

  • 当任务中发生未处理的异常时,我希望记录异常并停止服务。
  • 除非我调用,否则我无法捕获任务的异常Task.Wait().
  • 如果我打电话Task.Wait() the OnStart方法阻塞并且服务永远不会完成启动。

那么我怎样才能做到这一点呢?


您可以使用“.ContinueWith”方法处理任务中的异常:

Task.Factory.StartNew(() => {

    // Do some long action
    Thread.SpinWait(5000000);

    // that eventually has an error :-(
    throw new Exception("Something really bad happened in the task.");

    // I'm not sure how much `TaskCreationOptions.LongRunning` helps, but it sounds 
    // like it makes sense to use it in your situation.
}, TaskCreationOptions.LongRunning).ContinueWith(task => {

    var exception = task.Exception;

    /* Log the exception */

}, TaskContinuationOptions.OnlyOnFaulted); // Only run the continuation if there was an error in the original task.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 服务、阻塞收集和多线程问题 的相关文章

  • 自 2012 年 6 月升级 SDK 1.7 以来,Azure 部署不断回收

    我有一个之前运行成功的部署 从那时起 我已升级到 2012 年 6 月的 SDK 当我部署时 它会不断回收 如果我通过远程桌面进入实例 我可以手动打开应用程序并且它会运行 没有黄屏死机 因此必须有一些有关部署的信息 在事件查看器中我看到错误
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • Web API 获取多部分/表单数据响应的最简单方法

    我有问题 但我看不到我做错了什么 我想用最简单的方法来让它工作 稍后我会让它变得更复杂 但目前只想命中 post 方法 我什至不关心里面的代码当前是否正在工作 我唯一关心的是它会发回 OK 200 回复 目前 我要么收到内部服务器错误 50
  • ASP.NET C# 捕获类中的所有异常

    我知道这不是正确的做法 而且根本不干净 我只是想知道这是否可能 如果我有一个包含很多方法的类 public class Foo methodA methodB methodC 是否可以捕获所有可能发生的异常 而不必在每个方法中编写 try
  • Java 应用程序中 PKIX 路径构建失败

    将应用程序从 Windows 2000 迁移到 Windows 2008 R2 Server 后 我花了将近一周的时间才让我的应用程序正常运行 步骤 安装Java JDK 1 7 0 25 设置系统环境变量JAVA HOME to C Pr
  • HTTP 请求未经客户端身份验证方案“Ntlm”的授权 从服务器收到的身份验证标头为“NTLM”

    我知道有很多与此类似的问题 但我找不到针对这一特定问题的问题 首先有几点 I have 无控制通过我们的 Sharepoint 服务器 我无法调整任何 IIS 设置 我相信我们的IIS服务器版本是IIS 7 0 我们的 Sharepoint
  • 如何将期货放入容器中?

    我试图将异步生成的 future 放入向量中 这样我就不必执行以下操作 auto f1 async auto f2 async f1 get f2 get 我收到的此代码的编译错误是 调用已删除的 std 1 future 构造函数 任何人
  • NHibernate 中没有持久化:Castle.Proxies.Proxy 和lazy="true"?

    我正在尝试对我的实体之一的属性使用延迟加载 属性映射是这样的
  • C# 中的线程和静态方法

    下面以一个无意义的扩展方法为例 public static class MyExtensions public static int MyExtensionMethod this MyType e int x 1 x 2 return x
  • SQL CLR 内的 WCF 客户端

    我知道它不受支持 而且我知道这甚至不是一个好主意 但是 我希望在 SQL 表值函数中拥有一个 WCF 客户端 我 看似 注册了正确的程序集 但在运行我的客户端时 我收到 WCF 错误 Msg 6522 Level 16 State 1 Li
  • .Net 中的计时器和循环准确吗?

    在开发一个程序时 计算555定时器IC产生的脉冲的频率和脉冲宽度 通过PC并行端口传到PC 我注意到每次运行代码时它都会显示不同的值 因此我开始测试循环和计时器的准确性 我运行了以下代码 发现它们不准确 我可能是错的 如果我错了 请纠正我
  • 是否可以将 ServiceStack.Text.JsConfig 设置范围限制为您的库?

    我正在编写一个使用的自定义库ServiceStack Text https github com ServiceStack ServiceStack Text内部 使用我的其他库也可能使用 ServiceStack Text 我想改变一些J
  • 在 C# 汇编版本中使用前导零是否合适?

    我正在为我的 dot net dll 设置程序集版本 汇编版本具有以下格式 主要版本 次要版本 内部版本号 修订版 我将 Verison 设置如下 200 1 1 0 现在我的问题是我是否需要在次要版本 内部版本号和修订号中保留前导零 20
  • 在 .NET 中可以将数组或列表作为属性返回吗?

    我正在阅读 MSDN 上的一些文档 了解有关某些内容是否应该作为属性或方法实现的注意事项 我特别遇到了一条规则 对此我有疑问 如果 操作返回一个数组 请使用方法 而不是属性 页面在这里 在属性和方法之间进行选择 https msdn mic
  • 如何在Windows窗体代码后面编写方法的单元测试

    我有想要测试的方法 但收到此错误 在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke 现在我还有一个列表框 正在我正在测试的函数中填充 因此 当我将方法分离到另一个类时 这是一个问题 我理解这一点 因为表单需要首先
  • 处理 Kotlin 协程中自定义 okhttp 拦截器抛出的异常

    我正在使用自定义Interceptor与我的 Android 应用程序中的 Retrofit 客户端一起 在某些特定情况下会引发异常 我正在尝试使用 Kotlin 协程使其工作 问题是我无法处理前面提到的错误 因为在拦截器实例中抛出异常的那
  • .NET 中字段初始化器有什么用(除了可读性之外)?

    我只是想了解字段初始值设定项 我遇到了错误 字段初始值设定项无法使用非静态字段 方法或属性 在寻找这个答案时我遇到了THIS https stackoverflow com questions 27725571 why c sharp wo
  • .NET 中的 vista/win7 放大 API

    Win7 Vista SDK中有magnification lib可供使用放大API http msdn microsoft com en us library ms692162 28VS 85 29 aspx对于C 如何在 NET win
  • .NET 参考源代码中的四个破折号组是什么?

    我正在浏览源码PluralizationService http referencesource microsoft com System Data Entity Design System Data Entity Design Plura
  • Java多线程和安全发布[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 看完之后 Java并发实践 http jcip net and OSGI 实践 http neilbartlett name blog osgi

随机推荐

  • 将recvfrom() 与原始套接字一起使用:一般疑问

    我创建了一个原始套接字 它从数据链路层获取所有 IPv4 数据包 删除了数据链路层标头 为了读取我使用的数据包recvfrom 我的疑问是 假设由于操作系统进行了一些调度 我的进程休眠了 1 秒 当它醒来时 它做到了recvfrom 要接收
  • 使用 SSLSocket 的 SOCKS5 代理

    我有一个客户端 服务器应用程序 它通过 Java 的 SSLSocket 远程连接到服务器 我正在尝试实现一种可选模式 通过经过身份验证的 SOCKS v5 代理启用连接 我尝试使用相关教程 http download oracle com
  • 设置目录和子项的权限

    我的程序将一些目录 子目录和文件从服务器复制到本地计算机 我需要 每个本地用户都可以修改它 编辑 删除 删除 重命名 但现在它只能做所有者 如何为复制的目录及其子项目设置必要的权限 我尝试这样的代码 String account Path
  • 关闭 UIScrollView 中的键盘

    好吧 我有几个UITextFields and UITextViews里面一个UIScrollView 我想将键盘设置为消失scrollview被触摸或滚动 当然 当您触摸文本字段 视图内时除外 我目前的尝试是替换UIScrollView与
  • 如何使用 PDO 从 MySQL 获取数字类型?

    我正在使用 PDO 和 MySQL 由于某种原因 当从数据库获取 int 类型的值时 PDOStatement 返回数字的字符串表示形式 而不是数字类型的值 我该如何防止这种情况发生 我注意到 PDO 类有一个属性 PDO ATTR STR
  • jSoup 从 类获取文本

    我有一部分 HTML 文件 格式如下 h6 class uiStreamMessage span class messageBody Welcome span h6 在该文件中 还有其他跨度类 但我只想获取所有 messageBody 范围
  • Castle Windsor 或 Spring.NET - 优点和缺点 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在android中比较两个图像

    在我的应用程序中 我想使用相机捕获两个图像 然后我想比较这些图像 那么 如何比较两个图像呢 编辑 比较第一幅图像与第二幅图像的像素到像素完全相同 谢谢 1 检查高度是否匹配 如果不匹配则返回 false 然后 检查宽度是否匹配 如果不匹配
  • 如何获取从现在到未来时间的月数、周数、天数和小时数?

    我需要使用 Java 找出从现在到未来时间还剩多少月 周 天和小时 我不能使用像 Joda 这样的第三方库 我怎样才能只使用 JDK 类来做到这一点 到目前为止 这就是我想到的 除了某些情况之外 它有点有效 public class Dat
  • Hadoop 构建在 Windows 中失败:native.sln 中缺少 zconf.h?

    我正在尝试在使用 Windows 10 家庭版的开发计算机上构建以下 hadoop 版本 hadoop 2 7 3 src 以下是我本地开发环境的详细信息 Windows 10家庭版 英特尔酷睿 i5 6200U CPU 2 30GHz 内
  • 在某些 Android 设备中,Cordova 不会根据请求发送来源

    这是在某些 Android 设备上发生的问题 我有一个Samsung Galaxy A5 2017 与谷歌Chrome version 76 0 3809 89和 Android 版本 8 0 0 当我第一次在此设备上部署 Cordova
  • PopupMenuItem Click 和 MouseOver 的区别

    当菜单项有一个子菜单时 鼠标悬停在展开子菜单时会触发单击事件 这个点击事件和用户实际点击有什么区别吗 我使用 TPopupMenu 作为 cxButton 的下拉属性 EDIT德尔福2007 不确定这是否适用于 D2007 在 D7 中也是
  • 使用自定义 JsonConverter 来更改对象部分的序列化

    我很难重写自定义 JsonConverter 的 WriteJson 方法 以便稍微改变序列化的执行方式 我需要调用一个 REST 服务 该服务接受具有通用部分的特定输入 我可以使用以下有效负载格式重现我遇到的问题 public seale
  • 在 matplotlib python 中找到与 y 轴相对应的 x 轴值

    我正在尝试执行简单的任务 例如读取与 matplotlib 中 y 轴的值相对应的 x 轴的值 但我看不出出了什么问题 在这种情况下 我感兴趣的是 例如 如果我选择 x 2 0 我会得到 y 轴的哪个值 但我得到idx即使有数字 2 元组也
  • 在 WordPress 上建立数据库连接时出错

    我有一个 WordPress 博客 但是有时我对此有疑问 我遇到了打击错误 建立数据库连接时出错这要么意味着您的用户名和密码信息wp config php文件不正确或者我们无法联系数据库服务器 s 这可能意味着您主机的数据库服务器已关闭 如
  • 将动画 GIF 叠加在 MapView 上

    我一直在绞尽脑汁地试图让这个看似简单的任务发挥作用 我需要将一个动画 gif 放在地图视图上的叠加层中 我有以下代码 AnimationDrawable anim AnimationDrawable getResources getDraw
  • 在 Android 4.2 中写入全局设置

    Android 4 2引入了一个新类 设置 全局 http developer android com reference android provider Settings Global html 现在保存了一些以前的设置设置 安全 ht
  • 如何使用 Clockwork Rails 调度程序 Gem?

    我在 Clockwork 调度程序进程的语法方面遇到问题 实际上 我遇到了与此线程中讨论的类似问题 但从未完全回答 如何使用 Rails Clockwork gem 运行 rake 任务 https stackoverflow com qu
  • 将 pandas 列表数据框转换为数据框字典

    我有一个数据框 带有 DateTime 索引 其中一些列包含列表 每个列表有 6 个元素 In dframe head Out A B timestamp 2017 05 01 00 32 25 30 3512 375 1025 358 1
  • Windows 服务、阻塞收集和多线程问题

    我的场景 Windows 服务 NET 4 我轮询数据库中的实体 当新实体进来时 它们会被添加到BlockingCollection 在服务的OnStart我创建一个System Threading Tasks Task他的工作是枚举Blo