Повторяющееся задание выполняется несколько раз одновременноC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Повторяющееся задание выполняется несколько раз одновременно

Сообщение Anonymous »

У меня есть C# Worker, который использует HangFire, вот настройка program.cs:

Код: Выделить всё

 var sqliteOptions = new SQLiteStorageOptions();
builder.Services.AddHangfire(configuration => configuration
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseFilter(new DisableConcurrentExecutionAttribute(300))
.UseSQLiteStorage($"Filename={hangfireDbPath};" , sqliteOptions));

builder.Services.AddHangfireServer(options =>
{
options.WorkerCount = 1; // Limit to one worker
});
Тогда в Worker.cs у меня есть это:

Код: Выделить всё

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_fileMonitor.StartMonitoring();

_logger.LogInformation("Backup service is starting.");

// Start the Hangfire server
using (var server = new BackgroundJobServer())
{
_backupService.ScheduleInitialJobs();

_logger.LogInformation("Backup service has scheduled all initial backup jobs.");

await Task.Delay(Timeout.Infinite, stoppingToken);
}

}
И в моем BackupService есть это:

Код: Выделить всё

public void ScheduleInitialJobs()
{
var backupPlans = _backupPlanService.GetAllBackupPlans();

foreach (var plan in backupPlans)
{
if (plan.IsEnabled)
{
var cronExpression = GetCronExpression(plan);
var options = new RecurringJobOptions
{
TimeZone = TimeZoneInfo.Local
};
try
{
_recurringJobManager.AddOrUpdate(
plan.Name,
() => ExecuteBackupAsync(plan, CancellationToken.None),
cronExpression,
options);

}
catch (Exception ex)
{

}

}
}
}
А это мой метод ExecuteBackupAsync:

Код: Выделить всё

 [MaximumConcurrentExecutions(1)]
public async Task ExecuteBackupAsync(BackupPlan plan, CancellationToken cancellationToken)
{
...
}
Я проверил файл журналов и вижу следующее:

Код: Выделить всё

2024-05-15 23:05:09.297 -06:00 [DBG] 1 recurring job(s) processed by scheduler.
2024-05-15 23:05:09.302 -06:00 [DBG] 1 recurring job(s) processed by scheduler.
2024-05-15 23:05:24.113 -06:00 [DBG] Server ava:90924:57316309 heartbeat successfully sent
2024-05-15 23:05:24.165 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.171 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.378 -06:00 [DBG] Server ava:90924:0204f2f5 heartbeat successfully sent
2024-05-15 23:05:24.381 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.382 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.386 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.387 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.400 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.401 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.403 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.404 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.419 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.420 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.587 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.588 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.590 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.591 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.594 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.595 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:24.601 -06:00 [INF] Executing backup for plan: Plan01
2024-05-15 23:05:24.602 -06:00 [INF] Completed backup for plan: Plan01
2024-05-15 23:05:54.125 -06:00 [DBG] Server ava:90924:57316309 heartbeat successfully sent
2024-05-15 23:05:54.387 -06:00 [DBG] Server ava:90924:0204f2f5 heartbeat successfully sent
Это меня убивает, поскольку я могу подтвердить, что RecurringJob добавляется только один раз, и я могу проверить это в базе данных HangFire.
Справка пожалуйста!

Подробнее здесь: https://stackoverflow.com/questions/784 ... ncurrently
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»