diff --git a/src/DynamicData/List/Internal/TransformAsync.cs b/src/DynamicData/List/Internal/TransformAsync.cs index 3dadfa906..c502509db 100644 --- a/src/DynamicData/List/Internal/TransformAsync.cs +++ b/src/DynamicData/List/Internal/TransformAsync.cs @@ -40,21 +40,21 @@ private IObservable> RunImpl() var state = new ChangeAwareList.TransformedItemContainer>(); var asyncLock = new SemaphoreSlim(1, 1); - return _source.Select( - async changes => - { - try - { - await asyncLock.WaitAsync().ConfigureAwait(false); - await Transform(state, changes).ConfigureAwait(false); - return state; - } - finally + return _source.Select(async changes => { - asyncLock.Release(); - } - }).Select(tasks => tasks.ToObservable()).SelectMany(items => items).Select( - transformed => + try + { + await asyncLock.WaitAsync(); + await Transform(state, changes); + return state; + } + finally + { + asyncLock.Release(); + } + }) + .Concat() + .Select(transformed => { var changed = transformed.CaptureChanges(); return changed.Transform(container => container.Destination);