Skip to content

Diagnósticos de procesos ​

ProcessError describe un fallo de ejecución y conserva sus causas mediante razones tipadas.

Qué necesitas ​

Referencia Greencore.Platform.Processes e importa su namespace. Identifica la operación y la causa detectada: una excepción, un timeout, una cancelación u otra clasificación. No hace falta crear clases propias para las razones estándar.

Razones disponibles ​

TipoCódigoDatos específicos
ProcessExceptionReasonprocess.exceptionExcepción original
ProcessTimeoutReasonprocess.timeoutDuración opcional
ProcessCanceledReasonprocess.canceledToken de cancelación
ProcessUnavailableReasonprocess.unavailableMensaje

Todas declaran ProcessError como padre. Su código clasifica la causa; no establece automáticamente un estado HTTP.

Construir e interpretar ​

csharp
using Greencore.Platform.Processes;

var error = ProcessError.Create("No se pudo descargar el libro", "excel.download");
error.AddTimeoutReason(TimeSpan.FromSeconds(30), "La descarga superó el tiempo permitido");

foreach (var timeout in error.Reasons.OfType<ProcessTimeoutReason>())
    Console.WriteLine($"{error.Operation}: {timeout.Code}, límite {timeout.Timeout}");

AddExceptionReason(exception) conserva el objeto original, incluida su pila y excepción interna. AddCanceledReason(token) conserva el token. Estos métodos registran lo ocurrido: no cancelan operaciones ni inician temporizadores.

Extender una operación ​

Una raíz propia admite razones exclusivas y las razones estándar:

csharp
using Greencore.Platform.Processes;

var error = new ExcelReadError();
error.AddReason(new WorksheetMissingReason("Clientes"));

public sealed class ExcelReadError : ProcessError
{
    public ExcelReadError() : base("No se pudo leer el libro", "excel.read") { }
}

public sealed class WorksheetMissingReason : ProcessReason<ExcelReadError, WorksheetMissingReason>
{
    public string SheetName { get; }

    public WorksheetMissingReason(string sheetName) : base("excel.sheet_missing", $"No existe la hoja '{sheetName}'")
    {
        SheetName = sheetName;
    }
}

En un fallo diferente, la misma raíz puede usar AddExceptionReason(exception) o AddTimeoutReason(...). Una razón personalizada declara su padre en ProcessReason<TParent, TSelf>. Para una causa reutilizable en cualquier proceso, deriva de ProcessReason<TSelf>.

Ventaja frente a composición libre ​

Los consumidores identifican una cancelación o un timeout sin comparar mensajes. La información específica tiene propiedades con tipos conocidos. Los métodos de conveniencia evitan repetir la construcción de las razones habituales.

La aplicación decide qué hacer con cada clasificación. Registrar un timeout no implica que un reintento sea seguro.

Continúa con lectura y escritura de Excel o con la comparación de modelos.

Uso personal limitado. Uso comercial sujeto a autorización escrita.