【问题标题】:native/canonical approach to Fire-and-forget in ASP.NET Core world在 ASP.NET Core 世界中实现即发即弃的本机/规范方法
【发布时间】:2017-08-29 17:04:25
【问题描述】:

用 websockets 相关的代码做一些编码,我发现目前还不清楚如何正确处理长时间运行的后台进程或通过即发即弃语义执行的任务(这对于ASP.NET Core 2.0 仍然是正确的),因为那里可能是 DI 范围、应用重启等方面的一些陷阱。

因此,如果没有像 Hangfire 这样的花哨的东西,如果能在 .NET Core 世界中获得一些明智的想法将会很高兴

【问题讨论】:

  • 对不起,我忘记了我有权将问题作为重复问题关闭。非常相似的问题:stackoverflow.com/q/36945253/213550
  • @VMAtm - 这不是that 问题的重复。在遇到这个问题并进行了半天的研究之后。我发现这是一个非常具体和恰当的问题。

标签: c# asp.net-core asp.net-core-mvc .net-core


【解决方案1】:

可能值得在 IHostedServiceBackgroundService 类上查看此 MSDN 开发人员博客:

总结:

IHostedService 接口提供了一种便捷的启动方式 ASP.NET Core Web 应用程序中的后台任务(在 .NET Core 2.0 中) 或在任何进程/主机中(从 .NET Core 2.1 开始,IHost)。它的 主要好处是您可以通过优雅的取消获得机会 当主机本身是时清理后台任务的代码 正在关闭。

【讨论】:

    【解决方案2】:

    看起来这对 dotnet 团队来说是一个很常见的问题。所以他们最终写了一个文档来解释如何基于IHostedService接口来实现这个。因此,由于 .NET Core 2.0 正确的实现方式在本文中有所描述。

    Background tasks with hosted services in ASP.NET Core


    我使用基于队列和队列侦听器的建议方法重写了我自己的代码。在许多情况下,它确实与文章中提出的示例非常相似,但是,如果有很多人感兴趣,我可以将我的解决方案提取到 GitHub 并部署为 NuGet 包。

    【讨论】:

    • 这适用于 .netcore 吗?还是我们应该针对 .Net Framework 4.x 使用 QueueBackgroundWorkItem
    【解决方案3】:

    我研究了好几天。我在这里有一个类似的问题:

    Asp.Net Core 2.0: Simple way to execute long running tasks and report progress

    我找到了一种使用 QueueBackgroundWorkItem 的方法,但这在 Asp.Net Core 中不可用。

    我发现人们的回答中唯一一致的是,即发即弃是需要在 IIS 之外完成的事情。在 Windows 服务 或类似 Azure Web Jobs 之类的东西中。

    Hangfire 是唯一让您不必实现分布式架构的简单方法,但似乎不建议将其用于关键操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多