Beispiel #1
0
        public static async Task <IEnumerable <TState> > AddRangeAsync <TState, TActor>(this IStateCollection <TState> collection, IEnumerable <TActor> values, Func <TActor, Task <TState> > factory, IEqualityComparer <ActorReference> comparer = null)
            where TState : ActorState <TActor>
            where TActor : IActor
        {
            var list = await collection.GetAsync();

            var actualRange = new List <TState>();

            var set = new ActorStateSet <TState, TActor>(comparer);

            foreach (var element in list)
            {
                set.Add(element);
            }
            foreach (var value in values)
            {
                var added = await set.AddAsync(value, factory);

                if (added != null)
                {
                    actualRange.Add(added);
                }
            }

            if (actualRange.Count == 0)
            {
                return(actualRange);
            }

            return(await collection.AddRangeAsync(actualRange));
        }
Beispiel #2
0
        public static async Task <IEnumerable <TState> > RemoveRangeAsync <TState, TActor>(this IStateCollection <TState> collection, IEnumerable <TActor> values, IEqualityComparer <ActorReference> comparer = null)
            where TState : ActorState <TActor>
            where TActor : IActor
        {
            var list = await collection.GetAsync();

            var set = new ActorStateSet <TState, TActor>(comparer);

            foreach (var element in list)
            {
                set.Add(element);
            }

            return(await collection.RemoveRangeAsync(values.Select(value => set.Remove(value)).Where(removed => removed != null)));
        }