@@ -27,7 +27,7 @@ public abstract class EventSubscription<T> : IMessageSubscription, IAsyncDisposa
2727 internal ConsumePipe Pipe { get ; }
2828 protected ILoggerFactory ? LoggerFactory { get ; }
2929 protected LogContext Log { get ; }
30- protected CancellationTokenSource Stopping { get ; } = new ( ) ;
30+ protected CancellationTokenSource Stopping { get ; set ; } = new ( ) ;
3131
3232 protected ulong Sequence ;
3333
@@ -47,11 +47,13 @@ protected EventSubscription(T options, ConsumePipe consumePipe, ILoggerFactory?
4747 public string SubscriptionId => Options . SubscriptionId ;
4848
4949 public async ValueTask Subscribe ( OnSubscribed onSubscribed , OnDropped onDropped , CancellationToken cancellationToken ) {
50- var cts = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken , Stopping . Token ) ;
50+ if ( IsRunning ) return ;
51+
52+ Stopping = CancellationTokenSource . CreateLinkedTokenSource ( cancellationToken ) ;
5153
5254 _onSubscribed = onSubscribed ;
5355 _onDropped = onDropped ;
54- await Subscribe ( cts . Token ) . NoContext ( ) ;
56+ await Subscribe ( Stopping . Token ) . NoContext ( ) ;
5557 IsRunning = true ;
5658 Log . SubscriptionStarted ( ) ;
5759 onSubscribed ( Options . SubscriptionId ) ;
@@ -64,6 +66,7 @@ public async ValueTask Unsubscribe(OnUnsubscribed onUnsubscribed, CancellationTo
6466 onUnsubscribed ( Options . SubscriptionId ) ;
6567 await Finalize ( cancellationToken ) ;
6668 Sequence = 0 ;
69+ Stopping . Dispose ( ) ;
6770 }
6871
6972 protected virtual ValueTask Finalize ( CancellationToken cancellationToken ) => default ;
0 commit comments