Warum Haftfire keinen globalen Staat verändern kann
Posted: 08 Apr 2025, 00:31
Ich teste HangFire mit einem Basis -POC und es konnte selbst den grundlegendsten Zustand nicht ändern:
using Hangfire;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddHangfire(configuration => configuration
.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));
builder.Services.AddHangfireServer();
builder.Services.AddSingleton();
var app = builder.Build();
app.MapGet("/counter/value", (ICounterService counter) => counter.Value);
app.MapGet("/counter/incrementnow", (ICounterService counter) => counter.Increment());
app.MapGet("/counter/incrementlater", (ICounterService counter) => BackgroundJob.Schedule(() => counter.Increment(), TimeSpan.FromSeconds(5)));
app.UseHangfireDashboard();
app.Run();
interface ICounterService
{
int Value { get; }
void Increment();
}
class CounterService : ICounterService
{
public int Value { get; private set; }
public void Increment()
{
int previousValue = Value++;
Console.WriteLine($"Incremented from {previousValue} to {Value}.");
}
}
< /code>
Die Jobs werden ausgeführt, aber sie verwenden den globalen Dienst nicht, da ihre Ausgabe immer von 0 auf 1 erhöht wird. von Diensten?>
using Hangfire;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddHangfire(configuration => configuration
.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));
builder.Services.AddHangfireServer();
builder.Services.AddSingleton();
var app = builder.Build();
app.MapGet("/counter/value", (ICounterService counter) => counter.Value);
app.MapGet("/counter/incrementnow", (ICounterService counter) => counter.Increment());
app.MapGet("/counter/incrementlater", (ICounterService counter) => BackgroundJob.Schedule(() => counter.Increment(), TimeSpan.FromSeconds(5)));
app.UseHangfireDashboard();
app.Run();
interface ICounterService
{
int Value { get; }
void Increment();
}
class CounterService : ICounterService
{
public int Value { get; private set; }
public void Increment()
{
int previousValue = Value++;
Console.WriteLine($"Incremented from {previousValue} to {Value}.");
}
}
< /code>
Die Jobs werden ausgeführt, aber sie verwenden den globalen Dienst nicht, da ihre Ausgabe immer von 0 auf 1 erhöht wird. von Diensten?>