11// Copyright (c) Microsoft Corporation. All rights reserved.
22// Licensed under the MIT License.
33
4+ using System . Collections . Concurrent ;
45using Azure . Messaging . ServiceBus ;
56using System . Collections . Generic ;
67using System . Threading ;
@@ -17,7 +18,7 @@ public class ServiceBusMessageActions
1718 private readonly ProcessMessageEventArgs _eventArgs ;
1819 private readonly ProcessSessionMessageEventArgs _sessionEventArgs ;
1920
20- internal HashSet < ServiceBusReceivedMessage > SettledMessages { get ; } = new ( ) ;
21+ internal ConcurrentDictionary < ServiceBusReceivedMessage , byte > SettledMessages { get ; } = new ( ) ;
2122
2223 internal ServiceBusMessageActions ( ProcessSessionMessageEventArgs sessionEventArgs )
2324 {
@@ -64,7 +65,7 @@ public virtual async Task AbandonMessageAsync(
6465 await _sessionEventArgs . AbandonMessageAsync ( message , propertiesToModify , cancellationToken ) . ConfigureAwait ( false ) ;
6566 }
6667
67- SettledMessages . Add ( message ) ;
68+ TrackMessageAsSettled ( message ) ;
6869 }
6970
7071 ///<inheritdoc cref="ServiceBusReceiver.CompleteMessageAsync(ServiceBusReceivedMessage, CancellationToken)"/>
@@ -85,7 +86,7 @@ public virtual async Task CompleteMessageAsync(
8586 await _sessionEventArgs . CompleteMessageAsync ( message , cancellationToken ) . ConfigureAwait ( false ) ;
8687 }
8788
88- SettledMessages . Add ( message ) ;
89+ TrackMessageAsSettled ( message ) ;
8990 }
9091
9192 ///<inheritdoc cref="ServiceBusReceiver.DeadLetterMessageAsync(ServiceBusReceivedMessage, string, string, CancellationToken)"/>
@@ -123,7 +124,7 @@ await _sessionEventArgs.DeadLetterMessageAsync(
123124 . ConfigureAwait ( false ) ;
124125 }
125126
126- SettledMessages . Add ( message ) ;
127+ TrackMessageAsSettled ( message ) ;
127128 }
128129
129130 ///<inheritdoc cref="ServiceBusReceiver.DeadLetterMessageAsync(ServiceBusReceivedMessage, IDictionary{string, object}, CancellationToken)"/>
@@ -157,7 +158,7 @@ await _sessionEventArgs.DeadLetterMessageAsync(
157158 . ConfigureAwait ( false ) ;
158159 }
159160
160- SettledMessages . Add ( message ) ;
161+ TrackMessageAsSettled ( message ) ;
161162 }
162163
163164 ///<inheritdoc cref="ServiceBusReceiver.DeferMessageAsync(ServiceBusReceivedMessage, IDictionary{string, object}, CancellationToken)"/>
@@ -191,7 +192,10 @@ await _sessionEventArgs.DeferMessageAsync(
191192 . ConfigureAwait ( false ) ;
192193 }
193194
194- SettledMessages . Add ( message ) ;
195+ TrackMessageAsSettled ( message ) ;
195196 }
197+
198+ private void TrackMessageAsSettled ( ServiceBusReceivedMessage message )
199+ => SettledMessages [ message ] = 0 ;
196200 }
197201}
0 commit comments