C# 是否有Hangfire的内存作业存储包?

C# 是否有Hangfire的内存作业存储包?,c#,hangfire,C#,Hangfire,我有一个控制台应用程序来测试HangFire。代码如下: using System; using Hangfire; namespace MyScheduler.ConsoleApp { internal static class Program { internal static void Main(string[] args) { MyMethod(); Console.WriteLine("

我有一个控制台应用程序来测试HangFire。代码如下:

using System;
using Hangfire;

namespace MyScheduler.ConsoleApp
{
    internal static class Program
    {
        internal static void Main(string[] args)
        {
            MyMethod();

            Console.WriteLine("[Finished]");
            Console.ReadKey();
        }

        private static void MyMethod()
        {
            RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
        }
    }
}
但它在运行时抛出一个异常:

其他信息:JobStorage。当前属性值尚未更改 初始化。您必须在使用Hangfire客户端或服务器之前进行设置 API

所以我需要一个作业存储来运行这个。但是SQL存储中的所有示例等,是否有任何方法可以使用某种内存存储来运行此示例

JobStorage.Current = new SqlServerStorage("ConnectionStringName", options);  
// to  
JobStorage.Current = new MemoryDbStorage(string.Empty, options);  
你可以用这个

简单地加上

然后你可以像这样使用它-

GlobalConfiguration.Configuration.UseMemoryStorage();

正如Yogi所说,您可以使用Hangfire.MemoryStorage或Hangfire.MemoryStorage.Core(用于.Net Core)

答案中缺少的是需要放入ConfigureServices(..)中的完整代码(用于.Net Core):

对于NET Core(web应用程序):

只是为了让它变得非常明显,因为它对我来说并不明显

安装以下nuget软件包:

  • Hangfire.AspNetCore(atow版本6.17)
  • Hangfire.MemoryStorage.Core(v1.4.0 atow)
在Startup.cs中:

    public void ConfigureServices(IServiceCollection services)
    {
        // other registered services
        ...

        services.AddHangfire(c => c.UseMemoryStorage());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // other pipeline configuration            
        ...

        app.UseHangfireServer();

        app.UseMvc();
    }

任何低于上述的内容,我的排队方法都没有触发。

为了完整起见,Hangfire库的作者添加了一个名为
Hangfire.InMemory
的新包,该包的版本在Nuget上可用。存储库自述文件将其定位为面向生产使用。引用如下:“.一种用于Hangfire的高效事务性内存内存储,其数据结构接近其最佳表示形式。此尝试的结果应能使此存储实现的生产准备就绪并处理内存处理的特定属性…”

熟悉的配置概念也适用于此:
GlobalConfiguration.Configuration.UseInMemoryStorage()

我个人补充如下:
services.AddHangfire(配置=>{configuration.UseInMemoryStorage();})

你有没有尝试在谷歌上搜索“Hangfire内存”?我在10秒内找到了你问题的答案。即使您认为这不适合您,也有很多其他选项很容易设置,例如SQL Server LocalDB、SQLite和Mongo。我更新了我的问题。文件也应该更新。祝你今天愉快。NuGet的搜索功能不太好。使用谷歌/必应。无论如何,没有必要告诉我们有关文档的情况。您可以提交拉取请求以进行更新或在其上提出问题。无论如何,我认为他们在那里的文件很好。如果您阅读它,“Hangfire.Core就足够了”显然是指不安装主“Hangfire”包,该包具有控制台应用程序不需要的依赖项。就在上面,它清楚地表明您需要一个作业存储包。我很清楚,我没有修改你的答案。你没有答案!你有个问题。问题贴是用来提问的,回答贴是用来回答的。这就是我们在堆栈溢出时保持干净的方法。你在问题中编辑的内容不是问题的一部分(也不是解决方案),只是一些更适合评论的想法。这就是为什么我把它删掉了——为了让你的问题保持干净,并集中在这个问题上。我确实阅读了你链接到的文档——我自己也读了几遍,在几个项目中使用了Hangfire。文件对我来说很清楚。它说明了使用Hangfire。核心,而不是Hangfire。它说明您需要一个作业存储包。这很简单。但是,如果您不同意,堆栈溢出不是发泄您不同意的地方。如果您希望更新文档,那么您可以自己完成,也可以通过在GitHub回购协议上提交问题来请求他人完成。在这里说“有人应该更新”只是噪音。关注这个问题@梅森:是的,听说了:),但以防万一…,可能是他弄糊涂了,或者有点,我不知道。但是他发布了这个问题,这比谷歌搜索更费劲,所以我想他可能需要我们的回答:)正如作者所注意的,内存存储不应该在生产环境中。为了让它更加明显:不要忘记使用Hangfire和使用Hangfire.MemoryStorage声明。
    public void ConfigureServices(IServiceCollection services)
    {
        // other registered services
        ...

        services.AddHangfire(c => c.UseMemoryStorage());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // other pipeline configuration            
        ...

        app.UseHangfireServer();

        app.UseMvc();
    }