@@ -180,19 +180,22 @@ public static async IAsyncEnumerable<StateAtPointInTime<TState>> ProjectState<TS
180180 Func < TState , ResolvedEvent , TState > evolve ,
181181 [ EnumeratorCancellation ] CancellationToken ct
182182 ) where TState : notnull {
183- var state = initialState ;
184-
185183 if ( messages is KurrentClient . ReadStreamResult readStreamResult ) {
186184 if ( await readStreamResult . ReadState . ConfigureAwait ( false ) == ReadState . StreamNotFound ) {
187- yield return new StateAtPointInTime < TState > ( state ) ;
185+ yield return new StateAtPointInTime < TState > ( initialState ) ;
188186
189187 yield break ;
190188 }
191189 }
192190
191+ var states = new Dictionary < string , TState > ( ) ;
192+
193193 await foreach ( var resolvedEvent in messages . WithCancellation ( ct ) ) {
194+ var state = states . GetValueOrDefault ( resolvedEvent . OriginalStreamId , initialState ) ;
194195 state = evolve ( state , resolvedEvent ) ;
195196
197+ states [ resolvedEvent . OriginalStreamId ] = state ;
198+
196199 yield return new StateAtPointInTime < TState > (
197200 state ,
198201 resolvedEvent . Event . EventNumber ,
@@ -210,14 +213,13 @@ public static async Task<StateAtPointInTime<TState>> GetStateAsync<TState>(
210213 ) where TState : notnull {
211214 StateAtPointInTime < TState > ? stateAtPointInTime = null ;
212215
213- options ??= new GetStreamStateOptions < TState > ( ) ;
214-
215- if ( options . GetSnapshot != null ) {
216+ options ??= new GetStreamStateOptions < TState > ( ) ;
217+
218+ if ( options . GetSnapshot != null )
216219 stateAtPointInTime = await options . GetSnapshot (
217220 GetSnapshotOptions . ForStream ( streamName ) ,
218221 ct
219222 ) ;
220- }
221223
222224 options . StreamPosition = stateAtPointInTime ? . LastStreamPosition ?? StreamPosition . Start ;
223225
0 commit comments