Skip to content

Completar, cancelar y liberar un hub ​

Completar permite terminar de leer; disponer aborta las suscripciones. Elige según necesites drenar o detener.

csharp
using Greencore.platform.streaming;

await using var hub = StreamHub<int>.CreateWorkQueue();
await using var suscripcion = hub.Subscribe();
var consumidor = LeerAsync(suscripcion);
await hub.PublishAsync(10);
hub.Complete();
await consumidor;
var cierre = await suscripcion.Completion;
Console.WriteLine(cierre.Kind); // Completed.

static async Task LeerAsync(StreamSubscription<int> suscripcion)
{
    await foreach (var numero in suscripcion.ReadAllAsync())
        Console.WriteLine(numero);
}

Alcance de cada operación ​

OperaciónAlcance
hub.Complete()Impide publicar y permite drenar
hub.Fail(exception)Permite drenar y luego propaga el fallo
suscripcion.CancelAsync()Cancela y espera la limpieza de esa suscripción
suscripcion.DisposeAsync()Libera esa suscripción
hub.DisposeAsync()Aborta suscripciones y espera la limpieza interna

También puedes pasar un token a Subscribe(token) o ReadAllAsync(token): cancela esa suscripción. La primera terminación del productor prevalece; después del cierre no se admiten nuevas suscripciones.

suscripcion.Completion informa Completed, Failed, Canceled o Disposed, y conserva la excepción cuando corresponde. Una suscripción nunca enumerada debe cancelarse o disponerse explícitamente.

Recuerda: disponer el hub no espera el trabajo dentro de tus bucles. Conserva las tareas de los consumidores y espéralas; para abortar su procesamiento, pasa también un token a ese trabajo.

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