Hangfire 激活器未处理

2023-11-29

我遇到了 Hangfire 无法在 NET 5 上的 WebApi 中处理它实例的对象的问题。

这是我在“ConfigureServices()”中的配置(非常标准,顺便说一句):

services.AddScoped<ITestService, TestService>(); // I have also tried with "AddTransient()"

services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("Default")));
services.AddHangfireServer();

然后,我使用以下行在“Configure()”中配置重复作业:

public void Configure(IApplicationBuilder app,
                      IWebHostEnvironment env,
                      IHttpContextAccessor httpContextAccessor,
                      ITestService testService)
{
    // Omitting other configure code here

    RecurringJob.AddOrUpdate("Check", () => testService.Test(), Cron.Minutely); // You can try "*/1 * * * ? *" to speed it up
}

正如您所看到的,“ITestService”是通过 IoC 注入的。

仅供参考,“ITestService”是“IDisposable”。如果我在构造函数和“Dispose()”方法中都放置断点,则每个间隔都会调用构造函数,而永远不会调用“Dispose()”。

这对我来说是一个问题,因为服务本身还有其他依赖项,例如存储库(即:SQL 连接)。每当时间过去,应用程序就会开始崩溃,因为它耗尽了池中的连接:

失败:Hangfire.Processing.BackgroundExecution[0] 由于异常,Execution Worker 现在处于 Failed 状态,将在 00:05:00 以内重试执行 System.InvalidOperationException:超时已过期。从池中获取连接之前超时时间已过。发生这种情况的原因可能是所有池连接都在使用中并且已达到最大池大小。

如果我没记错的话,这个错误与未处理 SQL 连接有关。

那么,您认为我做错了什么吗?或者这可能是一个错误?

EDIT:

如果我将“this.Dispose()”放在 TestService.Test() 的末尾,并在那里手动处置存储库,则可以修复之前的错误。但我认为这不是一个合适的解决方案:S。


正如评论中所述,您应该使用:

RecurringJob.AddOrUpdate<ITestService>("Check", t => t.Test(), Cron.Minutely);

以这种方式调用该方法将触发依赖注入ITestServer并且实例将遵循预期的生命周期,并需要调用Dispose()

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

Hangfire 激活器未处理 的相关文章

  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 自定义可视化 Web 部件属性 sharepoint

    我在 Visual Studio 2012 中创建可视 Web 部件属性时遇到问题 我被提及http msdn microsoft com en us library ee231551 aspx http msdn microsoft co
  • 类型转换 sockaddr 结构

    我正在尝试学习网络编程 并在这个过程中学习C 我对结构感到困惑sockaddr这是一个通用地址 并且sockaddr in 我的书里是这么说的 因此 我们可以填写 sockaddr in 的字段 然后强制转换 a 指向 它指向 指向 soc
  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • 如何查找boost运行时版本

    我正在编写一个使用 boost 的 C 库 在这个库中 我想包含有关用于编译我的库的二进制版本的 boost 版本的信息 我可以使用宏BOOST VERSION这很好 我还想确定哪个是 boost 的运行时版本 以便我可以与用于编译我的库的
  • 实体框架 - 循环更新属性

    我正在尝试找到一种方法来循环 EF 对象的属性并更新这些属性的值 更具体地说 我有 50 个字段 其中最多填充 50 个下拉列表 所有 50 个可能都需要填充 也可能不需要填充 为了解决这个问题 我有一个中继器 最多可以创建 50 个 DD
  • 将数组从 C# 编组到 C++ 并返回:PInvokeStackImbalance

    我有一个 C 函数 我想从 C 访问它 问题是我不断收到 PInvokeStackImbalance 异常 但我不知道为什么 当检查异常被关闭时 一切都运行良好并且符合预期 我的 C 函数的签名是 extern C double solve
  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 无法使用 ASP.NET Core 从 JWT 令牌获取声明

    我正在尝试使用 ASP NET Core 实现 JWT 持有者身份验证的非常简单的实现 我从控制器返回的响应有点像这样 var identity new ClaimsIdentity identity AddClaim new Claim
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • C++ 克隆惯用语中协变返回类型的用处?

    通常的克隆习惯使用协变返回类型 struct Base virtual Base clone struct Derived public Base Derived clone 我读过一些内容 大意是协变返回类型是 C 后来添加的 较旧的编译
  • 为什么std::string在发布时是标准布局类型,但在调试时不是标准布局类型?

    include
  • 为什么 MISRA:2012 需要函数原型?

    我想知道为什么 MISRA 2012 需要函数原型 在下面的示例中 这两个原型并不是真正必要的 include
  • 我可以在C中直接比较int和size_t吗?

    我可以比较一个int and a size t像这样的变量 int i 1 size t y 2 if i y Do something 或者我必须输入其中之一 只要满足以下条件 它就是安全的int为零或正数 如果它是负数 并且size t
  • 在 C# 中将 ulong 映射到 long ?

    我正在尝试将 ulong 映射到 long 反之亦然 将 uint 映射到 int 反之亦然 如下所示 为了将值保存在具有签名类型的 MS SQL 数据库中仅限整数和大整数 我这样做是因为我必须检查 在数据库中 一个数字 uint ulon
  • 为什么C#不支持多重继承? [复制]

    这个问题在这里已经有答案了 可能的重复 C 应该包含多重继承吗 https stackoverflow com questions 191691 should c include multiple inheritance 为什么C 不支持多
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul

随机推荐

  • 适用于 Windows 的 CoffeeScript IDE - 尝试过 Titanium Studio 和 RubyMine

    我正在尝试找到一种在 Windows 上使用 CoffeeScript 的好方法 并且能够在 IDE 中将这些文件快速处理为 JavaScript RubyMine 如果我只是在 RubyMine 中打开一个 coffee 文件 这似乎可以
  • 在 UIPopover 内显示 UIDatePicker

    我正在使用以下代码来显示UIDatePicker在一个UIPopover当用户单击时显示UIButton 问题是 它显示在一个尴尬的位置 我想添加一个UIToolBar上面的datePicker有额外空间的地方 这将会有cancel and
  • 如何在 JavaFX Canvas 上禁用抗锯齿功能?

    目前我正在使用 JavaFX 开发一款 2D 游戏 该游戏是像素艺术的 不幸的是 由于抗锯齿 像素艺术变得模糊 有什么方法可以禁用 JavaFX 画布上的抗锯齿功能吗 我尝试过使用 SceneAntialiasing DISABLED 但它
  • Facade 和 Mediator 设计模式的区别?

    外观设计模式和中介设计模式有什么区别 我想了解在哪种情况下在这两种设计模式之间选择哪种设计模式 我浏览了以下链接 发现两者在用例方面都是相同的 立面设计模式 http www tutorialspoint com design patter
  • Java 使用 XStream 读取 XML

    我正在尝试使用 XStream 反序列化此 XML 文件 但收到此错误 Exception in thread main com thoughtworks xstream converters ConversionException Aut
  • 创建二维列表矩阵

    如何创建基于列表的矩阵1具有给定的行数和列数 例如 像 row 3 column 4 gt 1 1 1 1 1 1 1 1 1 1 1 1 这是使用列表理解的替代方法 让我们看一下基础知识 Prelude gt 2 x x lt 1 4 2
  • Asp.net MVC Razor如何显示两个模型字段的分组单选按钮

    我有一个简单的测验模型 我试图让用户从强类型视图中分组的两个单选按钮中选择正确答案 替代答案 但我使用的 lambda 表达式不起作用 我得到两个空白的单选按钮 我在这里和网上查看了几个问题 但我的模型是 IList 并且我找不到合适的示例
  • 如何根据下拉框 #1 的输入更改下拉框 #2?

    我有两个下拉菜单
  • 在 Eclipse 中运行 gtkmm 项目时出现“Gtk-WARNING **:无法打开显示:”

    我正在尝试在 Eclipse CDT 在 Ubuntu 上 中运行 gtkmm 项目 该项目编译正常 没有报告错误 但是当我尝试运行该项目时 控制台打印出此消息 Gtk WARNING cannot open display 如果我转到可执
  • Leaflet - 将控件放在 div 地图之外

    我制作了以下应用程序 http lae2 alwaysdata net carte exppng 我想将我的两个控件 leaflet control zoom 和 leaflet control layers 放在 div 地图之外 例如
  • 如何通过 C# 获取 Azure Log Analytics 工作区的工作区 ID

    如何通过 C 获取 Azure 中 Log Analytics 工作区的工作区 ID 从那以后我发现OperationalInsightsManagementClient也可以使用类 var client new OperationalIn
  • 如何在 mule 4 中将 ManagedCursorStreamProvider 转换为 JSOn 对象

    如何在 mule 中将 ManagedCursorStreamProvider 转换为 Json 对象 我写了一个java方法 它将Json对象作为输入 Request Payload a one b two 调用静态 arg0 paylo
  • Transformers PreTrainedTokenizer add_tokens 功能

    参考文档在 Huggingface 的很棒的变形金刚库中 我发现了add tokens功能 tokenizer BertTokenizer from pretrained bert base uncased model BertModel
  • 如何在QTableWidget中显示点击QPushButton的行

    我想删除行QPushButton被点击怎么可能我认为使用插槽是合理的 但如何做到这一点不知道 如果您有任何想法如何获取一行选定的按钮请分享 谢谢 这是我的桌子 这是我向 QTableWidget 添加行的代码 MainWindow Main
  • 使用本地图像在Windows Phone 8.1的webview中显示

    我在 Windows Phone 8 1 中创建了混合应用程序 我的一个页面使用了 webview 控件 它上面有一个 img 元素 我有一个小图像作为我的应用程序构建的一部分 复制到输出目录 设置为 始终复制 我已按照此页面的说明进行操作
  • 什么是软件框架? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 有人可以解释一下什么是软件框架吗 为什么我们需要一个框架 框架如何使编程变得更容易 我很
  • php 中 at-sign 的有效用例

    at 符号用于隐藏错误消息 据我所知 绝对没有使用它的用例或借口 您可以通过更改 php ini 设置来隐藏生产中的错误 同时仍将错误输出到日志文件 符号使其他程序员很难确定问题出在哪里 当您开发时 错误消息是您的朋友 快速发现错误并修复它
  • 需要列出 SQL Server 数据库中的所有触发器以及表名称和表架构

    我需要列出 SQL Server 数据库中的所有触发器以及表名称和表架构 我就快到了 SELECT trigger name name trigger owner USER NAME uid table schema table name
  • 有什么办法可以拯救脏画布吗?

    我正在使用 HTML5 画布制作视频屏幕截图 视频托管在其他地方 除了 toDataURL 之外一切正常 因为画布很脏 所以 我想知道 有什么办法可以将这个画布图像保存在计算机上吗 我认为答案是否定的 但希望有一些黑客来完成这件事 除了将视
  • Hangfire 激活器未处理

    我遇到了 Hangfire 无法在 NET 5 上的 WebApi 中处理它实例的对象的问题 这是我在 ConfigureServices 中的配置 非常标准 顺便说一句 services AddScoped