Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

465
Vistas
Hangfire: los métodos de llamada con retraso no funcionan

Tengo una aplicación central de ASP.NET y quería usar Hangfire para algunas tareas en segundo plano. Configuré Hangfire como se describe en la documentación oficial y puedo llamar a las tareas habituales en segundo plano. Sin embargo, tengo problemas para llamar a los métodos con retraso.

 public void Configure(/*other params*/ IBackgroundJobClient backgroundJobsClient) { //Other code backgroundJobsClient.Enqueue(() => Console.WriteLine("Method")); backgroundJobsClient.Schedule(() => Console.WriteLine("Delayed Method"), TimeSpan.FromSeconds(2)); }

Solo tengo salida "Método" en la consola.

Después de esperar un minuto, tengo una excepción en mi consola:

Hangfire.Processing.BackgroundExecution[0] Execution DelayedJobScheduler está en el estado Failed ahora debido a una excepción, la ejecución se volverá a intentar no más de 00:00:04 Hangfire.PostgreSql.PostgreSqlDistributedLockException: no se pudo colocar un bloqueo en el recurso 'HangFire :locks:schedulepoller': Tiempo de espera de bloqueo. en Hangfire.PostgreSql.PostgreSqlDistributedLock.PostgreSqlDistributedLock_Init_Transaction (recurso de cadena, tiempo de espera de TimeSpan, conexión de IDbConnection, opciones de PostgreSqlStorageOptions) en Hangfire.PostgreSql.PostgreSqlDistributedLock..ctor (recurso de cadena, tiempo de espera de TimeSpan, conexión de IDbConnection, opciones de PostgreSqlConnectionOptions) en Hangfire.PostgreSql AcquireDistributedLock(recurso de cadena, tiempo de espera de TimeSpan) en Hangfire.Server.DelayedJobScheduler.UseConnectionDistributedLock[T](almacenamiento de JobStorage, 2 action) at Hangfire.Server.DelayedJobScheduler.EnqueueNextScheduledJobs(BackgroundProcessContext context) at Hangfire.Server.DelayedJobScheduler.Execute(BackgroundProcessContext context) at Hangfire.Server.BackgroundProcessDispatcherBuilder.ExecuteProcess(Guid executionId, Object state) at Hangfire.Processing.BackgroundExecution.Run(Action 2, estado del objeto) !!! No se pudo colocar un bloqueo en el recurso 'HangFire:locks:schedulepoller': tiempo de espera de bloqueo.

Entonces, supongo que hay algún problema con la inicialización de métodos retrasados. ¿Alguien podría ayudarme con eso? Probablemente no configuré Hangfire correctamente para ASP.NET core.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Finalmente he encontrado una solución. La fecha se almacena en la base de datos de Hangfire en formato UTC. No lo sabía, y la documentación oficial no dice nada al respecto. El código correcto debería ser algo como esto:

 DateTime.UtcNow.AddSeconds(2);
over 4 years ago · Santiago Trujillo Denunciar

0

Resolví este problema de la siguiente manera.

Hay una mesa de bloqueo en las mesas Hangfire . Eliminé todos los datos en la tabla de bloqueo, mi problema se resolvió.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda