12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using InABox.Clients;
- namespace InABox.Core
- {
- public class MultiSave
- {
- private readonly Dictionary<Type, List<Entity>> _updates = new Dictionary<Type, List<Entity>>();
- public void Clear()
- {
- _updates.Clear();
- }
- public void Add(Type type, params Entity[] entities)
- {
- if (!_updates.ContainsKey(type))
- _updates[type] = new List<Entity>();
- _updates[type].AddRange(entities);
- }
- public void Save(Action<MultiSave>? callback = null, string audittrail = "")
- {
- var tasks = new List<Task>();
- foreach (var type in _updates.Keys)
- {
- var task = Task.Run(
- () =>
- {
- var client = ClientFactory.CreateClient(type);
- client.Save(_updates[type], audittrail);
- }
- );
- tasks.Add(task);
- }
- if (callback != null)
- Task.WhenAll(tasks.ToArray()).ContinueWith(t => { callback.Invoke(this); });
- else
- Task.WaitAll(tasks.ToArray());
- }
- }
- }
|